热度 21
2015-10-21 20:55
1667 次阅读|
1 个评论
今日拿到一块朋友制作的 AM335x 电路板,这里暂且称为 oem335x ,本博客记录在 oem3358 上的运行 SylixOS 操作系统的过程。 目前 SylixOS 官网中发布的 am335x 系列 bsp支持 beaglebone 、 ok335xd 、 ok335xs ,根据只有 ok335xs 支持双千兆以太网,因此选用 ok335xs 的 bsp 做模板。 1.1.1 uboot 配置项目 目前 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-base/libsylixos/Makefile ,修改其中的 -mcpu 配置为 cortex-a8 打开文件 sylixos-base/libcextern/Makefile ,修改其中的 -mcpu 配置为 cortex-a8 完成上述修改后,重启开发板使用新 SylixOS 镜像启动,已经不会有这种错误出现。 2. 虽然以太网 PHY 芯片不同,但 oem335x 的以太网能够正常使用,在正确设置 ip 地址后,两个千兆网口是可用的,可以理解为 RTL8211E 与 AR8031 的驱动是兼容的。仅仅是 PHY 芯片的地址不同。 1.1.3 添加 SD 卡和 RAMFS 系统启动后发现 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 电路板基本可以正常工作,常用接口可以正常使用。