今日拿到一块朋友制作的AM335x电路板,这里暂且称为oem335x,本博客记录在oem3358上的运行SylixOS操作系统的过程。
目前SylixOS官网中发布的am335x系列bsp支持beaglebone、ok335xd、ok335xs,根据只有ok335xs支持双千兆以太网,因此选用ok335xs的bsp做模板。
目前oem335x使用SD卡启动,不支持以太网、也不支持U盘,因此对调试效率带来影响,若高效率调试,还需要在uboot中添加对以太网的支持。
根据提供的uboot的代码增加了对uboot以太网的支持,由于使用sd卡启动,不能够保持设置的serverip等信息,因此在uboot启动后需要手动设置serverip变量,随后使用dhcp命令自动获取本机ip地址,uboot会自行启动tftp命令下载sylixos镜像文件。
1.1.2 运行SylixOS系统
首先将AM335xbsp编译运行,在测试中发现当SylixOS检测硬件不通过时,系统会阻塞在一个地方,因此将rsb4221中没有的器件屏蔽掉。屏蔽掉的器件有:
l TPS65217电源芯片
屏蔽代码bspForlinx.c中bspDrvInit函数中tps65217Drv函数;
屏蔽代码bspForlinx.c中bspDevInit函数中tps65217DevCreate函数。
l ft5x06触摸屏驱动
屏蔽代码bspForlinx.c中bspDrvInit函数中ft5x06Drv函数;
屏蔽代码bspForlinx.c中bspDevInit函数中ft5x06DevCreate函数。
l ds1337的驱动
屏蔽代码bspForlinx.c中bspTimeInit函数中所有代码;
l beep驱动
屏蔽代码bspForlinx.c中bspDrvInit函数中beepDrv函数;
屏蔽代码bspForlinx.c中bspDevInit函数中beepDevCreate函数。
l audio驱动
屏蔽代码bspForlinx.c中bspDrvInit函数中audioCodecDrv函数;
屏蔽代码bspForlinx.c中bspDevInit函数中audioCodecDevAdd函数。
l 修改makefile,使之只支持单个电路板
删除BSP_SRCS的选择宏命令。
l 修改源文件config_ok335xs.h中的宏,
将OK335xS部分修改为OEM335X。
触摸屏相关配置为0(#define BSP_CFG_FT5X06_TOUCH_EN 0)
网口相关配置,更改PHY芯片地址,
U15对应PHY地址011 = 3(#define CPSW0_PORT_1_PHY_ADDR 3);
U16对应PHY地址111 = 7(#define CPSW0_PORT_2_PHY_ADDR 7)。
NAND相关配置均设置为0(#define BSP_CFG_NAND_EN 0)。
1.进行上述改动后,编译bsp并将生成的文件下载到oem335x运行,能起到,但输出信息为
archMmuInit() error:machine name is NOT fix with compiler –mcpu or march parameter archCacheInit() error: machine name is NOT fix with compiler –mcpu or march parameter envionment variables load from /etc/profile fail,error:No such file or directory |
archCacheInit函数也是类似。
l 问题原因及解决:
工程使用的sylixos-base工程是从官网git下的原始工程,没有配置其中的-mcpu选项,
完成上述修改后,重启开发板使用新SylixOS镜像启动,已经不会有这种错误出现。
2.虽然以太网PHY芯片不同,但oem335x的以太网能够正常使用,在正确设置ip地址后,两个千兆网口是可用的,可以理解为RTL8211E与AR8031的驱动是兼容的。仅仅是PHY芯片的地址不同。
系统启动后发现SD卡不能使用,核对原理图发现需要修改mmc0的引脚分配。
原理图中;
在bspForlinx.c文件中,Module pin mux for mmc0目录下,有宏定义:__MMC0_CD_GPIO更改如下:
#define __MMC0_CD_GPIO AM335X_GPIO_NUMBER(3, 14) |
完成上述修改后,重新编译系统启动,sylixos可以正常识别SD卡。
此时SylixOS的shell输出用户是unknown,这里添加RAMFS设置
在文件bspInit.c中的函数halStdDirInit结束位置添加如下代码:
#if BSP_CFG_RAM_ROOTFS_EN > 0 mkdir("/ramdisk/boot", DEFAULT_DIR_PERM); mkdir("/ramdisk/etc", DEFAULT_DIR_PERM); mkdir("/ramdisk/ftk", DEFAULT_DIR_PERM); mkdir("/ramdisk/qt", DEFAULT_DIR_PERM); mkdir("/ramdisk/lib", DEFAULT_DIR_PERM); mkdir("/ramdisk/lib/modules", DEFAULT_DIR_PERM); mkdir("/ramdisk/usr", DEFAULT_DIR_PERM); mkdir("/ramdisk/usr/lib", DEFAULT_DIR_PERM); mkdir("/ramdisk/bin", DEFAULT_DIR_PERM); mkdir("/ramdisk/sbin", DEFAULT_DIR_PERM); mkdir("/ramdisk/apps", DEFAULT_DIR_PERM); mkdir("/ramdisk/home", DEFAULT_DIR_PERM); mkdir("/ramdisk/root", DEFAULT_DIR_PERM); mkdir("/ramdisk/var", DEFAULT_DIR_PERM); symlink("/ramdisk/boot", "/boot"); symlink("/ramdisk/etc", "/etc"); symlink("/ramdisk/ftk", "/ftk"); symlink("/ramdisk/qt", "/qt"); symlink("/ramdisk/lib", "/lib"); symlink("/ramdisk/usr", "/usr"); symlink("/ramdisk/bin", "/bin"); symlink("/ramdisk/sbin", "/sbin"); symlink("/ramdisk/apps", "/apps"); symlink("/ramdisk/home", "/home"); symlink("/ramdisk/root", "/root"); symlink("/ramdisk/var", "/var"); #endif 在头文件config_ok335xs.h中添加宏定义 /****************************************************************************** RAMFS 配置 ******************************************************************************/ #define BSP_CFG_RAM_ROOTFS_EN 1 |
在启动后,SylixOS的默认用户就不再是unknown而是root。此时使用FileZilla工具可以查看SylixOS系统的资源。使用Telnet也可以连接SylixOS设备。
在调试过程中,还出现了“..can not find symbol: printf ”的错误,原以为是什么的大问题,后来发现是bsp的base工程编译设置和应用程序参考的base工程编译设置不同更改一致即可。至此oem335x电路板基本可以正常工作,常用接口可以正常使用。
用户377235 2016-5-1 22:23