原创 AM335x电路板BSP移植

2015-10-21 20:55 1667 20 21 分类: MCU/ 嵌入式 文集: SylixOS BSP开发

今日拿到一块朋友制作的AM335x电路板,这里暂且称为oem335x,本博客记录在oem3358上的运行SylixOS操作系统的过程。

目前SylixOS官网中发布的am335x系列bsp支持beagleboneok335xdok335xs,根据只有ok335xs支持双千兆以太网,因此选用ok335xsbsp做模板。

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.cbspDrvInit函数中tps65217Drv函数;

屏蔽代码bspForlinx.cbspDevInit函数中tps65217DevCreate函数。

l  ft5x06触摸屏驱动

屏蔽代码bspForlinx.cbspDrvInit函数中ft5x06Drv函数;

屏蔽代码bspForlinx.cbspDevInit函数中ft5x06DevCreate函数。

l  ds1337的驱动

屏蔽代码bspForlinx.cbspTimeInit函数中所有代码;

l  beep驱动

屏蔽代码bspForlinx.cbspDrvInit函数中beepDrv函数;

屏蔽代码bspForlinx.cbspDevInit函数中beepDevCreate函数。

l  audio驱动

屏蔽代码bspForlinx.cbspDrvInit函数中audioCodecDrv函数;

屏蔽代码bspForlinx.cbspDevInit函数中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地址后,两个千兆网口是可用的,可以理解为RTL8211EAR8031的驱动是兼容的。仅仅是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卡。

此时SylixOSshell输出用户是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 ”的错误,原以为是什么的大问题,后来发现是bspbase工程编译设置和应用程序参考的base工程编译设置不同更改一致即可。至此oem335x电路板基本可以正常工作,常用接口可以正常使用。

文章评论1条评论)

登录后参与讨论

用户377235 2016-5-1 22:23

请教一下,可以把文件系统建立在SD里吗,或者说从SD卡启动,MLO,uboot.img,bspam335x.bin和文件系统都在SD里?
相关推荐阅读
用户1599256 2016-05-11 13:28
GoAhead下的CGI程序使用说明
首先读者需要参考博客http://bbs.ednchina.com/BLOG_ARTICLE_3029934.HTM的内容将GoAhead在SylixOS下正常执行。 其次编译一个SylixOS ...
用户1599256 2016-04-10 17:05
Zynq7000网络驱动调试笔记
  Zynq7000的网络控制器与Atmel公司的SAMA5D3x处理器的千兆网控制器是相同的均是Cadence公司的的IP,很奇怪两个公司各自设计了一套驱动程序。不过看着Zynq7000中Linux...
用户1599256 2016-04-10 16:20
Zynq7000 的I2C控制器调试方法和流程
zynq7000的I2C控制器是cadence公司的IP,做一个驱动如果从阅读数据手册开始,效率会很低,因此首先找到了其Linux的I2C驱动文件i2c_cadence.c,话一部分时间阅读两遍后,会...
用户1599256 2016-04-10 15:48
在sylixos中增加自定义的shell命令
对操作系统来讲,无论是PC的Windows、Linux还是嵌入式系统VxWorks、QNX、SylixOS,shell都是一个强大的调试手段,在进行驱动开发、应用开发、系统维护方面有着重要作用。 S...
用户1599256 2016-04-02 09:50
E9电路板与SabreLite电路板的bsp迁移
  1、将调试串口更改为ttyS1,sioChanCreate输入参数改为1 2、bspDebugMsg的串口设置为2。启动开发板执行镜像可以执行,在昨天的设置中没有正确修改设置sioChanCr...
用户1599256 2016-03-12 20:39
林语堂:中华民国的真相
中国有句俗语,叫做宁为太平狗,莫作乱世人。中国人人都愿意太平盛世做一条狗,可竟没有这般运气。因为我们生存于不安定的清醒的时代,缺乏对革命的信任心。盂子说过哀莫大于心死,而现在人们的心真已死了。1926...
我要评论
1
20
关闭 站长推荐上一条 /2 下一条