设为首页 加入收藏

TOP

U-Boot在JX2410上的移植
2014-11-24 12:02:42 来源: 作者: 【 】 浏览:0
Tags:U-Boot JX2410 移植

在开始移植之前,得先了解u-boot的启动过程,明白各个主要文件目录。可阅读README文档。以下以S3C2410为例子简要说明启动过程中所用到的文件名:


cpu/arm920t/start.s 完成硬件初始化,设置cpu工作模式、关看门狗、设置时钟等


→board/smdk2410/lowlevel_init.s 为第二阶段准备RAM空间


→lib_arm/board.c跳转到第二阶段代码的c入口点,初始化队列中各项,分别到其他文件中调用。


→common/main.c循环调用main_loop


了解u-boot编译过程:


make [board]_config 配置目标板,其中[board]为目标板名称,需在board目录下有相应文件夹,在include/configs/目录下有相应头文件。


→make all 编译链接


本次移植采用的是1.1.6版本。


2. 安装交叉编译器arm-linux-gcc-3.3.2。解压到/usr/local/arm目录下;出现3.3.2文件夹;修改环境变量/etc/profile;在最后添加export PATH=/usr/local/arm/3.3.2/bin:$PATH;执行source /etc/profile;使用arm-linux-gcc –v命令查看版本信息。


3. 解压u-boot:tar –jxvf u-boot-1.1.6.tar.bz2


4. 修改顶层Makefile,为目标板建立编译项。


smdk2410_config:unconfig


@$(MKCONFIG)$(@:_config=) arm arm920t smdk2410 NULL s3c24x0


修改为:


zfxjx2410_config:unconfig


@$(MKCONFIG)$(@:_config=) arm arm920t jx2410 NULL s3c24x0


其中:


arm,就表示现在用的是CPU的架构是arm体系结构。


arm920t,指明这是cpu的内核类型,它对应于cpu/arm920t目录。


Smdk2400,这是开发板的型号,它的目录在board/smdk2400目录下。


NULL,表示开发者或者经销商是谁(vender)。


S3c24x0,表示开发板上的cpu是啥。


5. 修改/board/smdk2410文件夹名称:


mv /board/smdk2410 /board/jx2410


修改/board/smdk2410/smdk2410.c文件名称:


mv /board/smdk2410/smdk2410.c /board/jx2410/jx2410.c


6. 修改/include/configs/smdk2410.h文件名称


mv /include/configs/smdk2410.h /include/configs/zfxjx2410.h


7. 根据实际需要修改start.s。本次移植不需要修改。


根据需要修改/board/jx2410/jx2410.c。可配置时钟MPLL、UPLL、I/O初始化。本次移植不修改。


若是2440,修改cpu/arm920t/s3c24x0/speed.c。因为2410与2440在计算MPLL公式不同。


8. 到前为止,可以编译u-boot下载到目标板中看看效果。


从串口中可以看到u-boot启动信息:


U-Boot 1.1.6(Sep 19 2011 -12:24:07)


DRAM: 64MB


Flash:512kB


……


但是从以上信息中可以看到Flash的信息和目标板真实信息不符。原因是在/include/configs/zfxjx2410.h中未根据硬件修改。不过目前能看到串口信息,我们之后的调试就变得简单多了。如未能看到串口信息,可能波特率设置不对或串口驱动部分有问题。


9. 配置文件中一些显示信息的修改。/include/configs/zfxjx2410.h


#define CONFIG_BOOTDELAY 1 //启动延时


#define CFG_PROMPT "ZFX_JX2410 # " //命令行前的显示信息


10. SDRAM的驱动。本次移植未修改。


11. 增加网口的驱动。


由于u-boot源码是针对CS8900芯片的,而实验箱用的是RTL8019。而我们在/driver目录下找到了RTL8019的驱动程序,因此,只需在/include/configs/zfxjx2410.h中修改。 将


#define CONFIG_DRIVER_CS8900 1


#define CS8900_Base 0x19000300


#define CS8900_Bus16 1


修改为:


#define CONFIG_DRIVER_RTL8019 1


#define RTL8019_Base 0x18000300 //基地址,和硬件有关


#define RTL8019_Bus16 1


修改为:


#CFG_ETHADDR 01:36:75:18:14:37


#CFG_NETMASK 255.255.255.0


#CFG_IPADDR 172.30.0.116


#CFG_SERVERIP 172.30.0.117


编译成功,下载,但是在tftp下载时,发生packet too big!错误,然后重启。


在网上搜索,发现因为/drivers/rtl8019中,缺少volatile。加上,下载运行成功。


Static unsigned char get_reg(unsigned int regno)


{


return (*(volatile unsigned cahr *)regno);


}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android应用实例之动态展示assets.. 下一篇OpenGL ES 绘制 3D 图形

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)
·[ Linux运维学习 ] (2025-12-26 02:52:27)
·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)