作为U-boot的鼻祖-ARMboot以其小巧玲珑(代码压缩包仅有400K多),但又麻雀虽小,五脏俱全,不失为研究U-boot的第一步,而且在ARMboot中处处还能看到U-boot的影子。好啦,开始我们的移植之旅吧。
移植目标: 驱动串口;驱动网络芯片dm9000;实现内核的下载(uImage);实现启动 Linux kernel(zImage),实现Nand Flash启动
移植版本: ARMboot-1.1.0
ARMboot在哪: http://www.sourceforge.net/projects/armboot
交叉编译器: arm-linux-gcc 2.95.3 (在该版本下可以一次编译成功,所以采用该版本的交叉编译器)
开发板配置: RAM:64MB,Nor:2MB,Nand:64MB,Processor:Samsung S3C2440网卡芯片:dm9000
操作系统环境: RedHat Linux 9.0
环境查看:
编译器:
[root@www.linuxidc.com root]# arm-linux-gcc -v
Reading specs from /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)
源代码包:
[root@www.linuxidc.com arms]# ls -l
total 428
-rw-r--r-- 1 root root 431099 Feb 25 2007 armboot-1.1.0.tgz
解压源码包:
[root@www.linuxidc.com arms]# tar zxvf armboot-1.1.0.tgz
进入源码目录:(之后的所用工作均在该目录下完成)
[root@www.linuxidc.com arms]# cd armboot-1.1.0
[root@www.linuxidc.com armboot-1.1.0]#
armboot-1.1.0已经支持smdk2410开发板,该开发板和mini2440有一定的相似性,我们在
在SMDK2410开发板的基础上进行移植。
测试smdk2410是否能通过编译:
[root@www.linuxidc.com armboot-1.1.0]# make distclean; make smdk2410_config ; make all
通过编译,查看生成的文件如下:
[root@www.linuxidc.com armboot-1.1.0]# ls -altr
-rwxr-xr-x 1 root root 224812 May 24 08:43 armboot.srec
-rw-r--r-- 1 root root 28391 May 24 08:43 armboot.map
-rw-r--r-- 1 root root 210779 May 24 08:43 armboot.hex
-rwxr-xr-x 1 root root 74916 May 24 08:43 armboot.bin
-rwxr-xr-x 1 root root 91185 May 24 08:43 armboot
其中的armboot.bin即为最终的可以烧写到NandFlash的文件,由于代码还需修改,现在这个文件还不能适应mini2440的开发板环境,
上面的过程只是验证了smdk2410的配置即程序文件可以在arm-linux-gcc 2.95.3顺利编译通过,我们还需对代码做进一步的修改使得
其可以运行在到MINI2440上。
下面开始进行MINI2440的移植,为便于查看,将所涉及到的代码的行首都加了行号标示。
*************************************************************************************************************************************************
** 初步移植,复制关于SMDK2410的全部文件,并做相应地修改,在smdk2410的基础上构建MINI2440的代码环境
*************************************************************************************************************************************************
0) 清除上面的编译结果:
[root@www.linuxidc.com armboot-1.1.0]# make distclean
1) 复制smdk2410_config的配置文件(注:所有板子的配置文件均在include/configs下)
[root@www.linuxidc.com armboot-1.1.0]# cp include/configs/config_smdk2410.h include/configs/config_mini2440.h
复制完成后在config_mini2440.h做一个简单的修改标记-该变提示符:(建议:修改时先做做备份-即注释掉原来的代码,而后改成新的),
可用如下的sed 命令直接修改(用sed脚本修改只可执行1遍,切勿多次执行!)
[root@www.linuxidc.com armboot-1.1.0]# sed -i'~' -e '/^(#definetCFG_PROMPT..*)/ {N; s/(..*)n///1 // snallie, `date +%F_%H%M%S_%a`n1 // snallie, `date +%F_%H%M%S_%a`n/g; s/SMDK2410/ARMboot@MINI2440/2 }' include/configs/config_mini2440.h
或者用vi进行全屏幕编辑修改:
[root@www.linuxidc.com armboot-1.1.0]# vi +99 include/configs/config_mini2440.h
具体修改的位置为:
改
99 #define CFG_PROMPT 'SMDK2410 # ' /* Monitor Command Prompt */
为:
99 //#define CFG_PROMPT 'SMDK2410 # ' /* Monitor Command Prompt */ // snallie, 2011-05-24_090111_Tue
100 #define CFG_PROMPT 'ARMboot@MINI2440 # ' /* Monitor Command Prompt */ // snallie, 2011-05-24_090111_Tue
2) 拷贝smdk2410的板级的程序文件为mini2440
[root@www.linuxidc.com armboot-1.1.0]# cp -a board/smdk2410/ board/mini2440
3) 修改mini2440的板级的Makefile,文件位置在 board/mini2440/Makefile
改
28 OBJS := smdk2410.o flash.o env.o
为:
28 # OBJS := smdk2410.o flash.o env.o # snallie, 2011-05-24_091150_Tue
29 OBJS := mini2440.o flash.o env.o # snallie, 2011-05-24_091150_Tue
可用如下的sed 命令直接修改:(用sed脚本修改只可执行1遍,切勿多次执行!)
[root@www.linuxidc.com armboot-1.1.0]# sed -i'~' -e '/^(OBJSt:= smdk2410.o..*)/ {N; s/(..*)n/# 1 # snallie, `date +%F_%H%M%S_%a`n1 # snallie, `date +%F_%H%M%S_%a`n/g; s/smdk2410/mini2440/2 }' board/mini2440/Makefile
或者用vi进行全屏幕编辑修改:
[root@www.linuxidc.com armboot-1.1.0]# vi +28 board/mini2440/Makefile
4) 修改mini2440的板级的文件名,涉及文件为 board/mini2440/smdk2410.c
[root@www.linuxidc.com armboot-1.1.0]# mv board/mini2440/smdk2410.c board/mini2440/mini2440.c
5) 修改顶层的Makefile:找到smdk2410_config,仿照smdk2410_config,添加mini2440_config,如下:
200 smdk2410_config : unconfig 可用如下的sed 命令直接修改:(用sed脚本修改只可执行1遍,切勿多次执行!) 或者用vi进行全屏幕编辑修改: 注意:用vi手工修改时候,Makefile中的新添的210~215行的行首为制表符(TAB键),而不是空格,若输入的是空格,则编译出错 6) 程序的版本号有误,修改:include/version.h 可用如下的sed 命令直接修改:(用sed脚本修改只可执行1遍,切勿多次执行!) 或者用vi进行全屏幕编辑修改 7) 关于SMDK2410的全部文件复制完成,编译测试: 通过编译! ************************************************************************************************************************************************* 查看SMDK2410的代码,知道和CPU相关的代码通过在include/configs/config_smdk2410.h的宏定义CONFIG_S3C2410进行控制,和开发板SMDK2410相关的代码通过 #define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */ 顺着这个线索,我们看看在原有的SMDK2410的代码有那些和CONFIG_S3C2410和CONFIG_SMDK2410的代码,以及它们分布在那些文件中: 和CONFIG_S3C2410相关的:
201 @echo 'Configuring for $(@:_config=) Board...' ;
202 cd include ;
203 echo 'ARCH = arm' > config.mk ;
204 echo 'BOARD = smdk2410' >>config.mk ;
205 echo 'CPU = arm920t' >>config.mk ;
206 echo '#include
207
208 # snallie, 2011-05-24_091758_Tue
209 mini2440_config : unconfig
210 @echo 'Configuring for $(@:_config=) Board...' ;
211 cd include ;
212 echo 'ARCH = arm' > config.mk ;
213 echo 'BOARD = mini2440' >>config.mk ;
214 echo 'CPU = arm920t' >>config.mk ;
215 echo '#include
216
[root@www.linuxidc.com armboot-1.1.0]# sed -i'~' -e '/smdk2410/,+7 {N;N;N;N;N;N;N; s/(..*)n(..*)n(..*)n(..*)n(..*)n(..*)n(..*)n/&n# snallie, `date +%F_%H%M%S_%a`n1n2n3n4n5n6n7n/g;s/smdk2410/mini2440/3;s/smdk2410/mini2440/3 } ' -e '/backup/,/gtar/ {N;N;N; s/(..*)n(..*)n(..*)n/#1n#2n#3nn# snallie, `date +%F_%H%M%S_%a`n1n2n3n/g; s/'([^n]*)(.tar.gz)/'+$$F-gk-%Y%m%d_%H%M%S2/2 } ' -e '/^armboot.bin/ {N;N;N; s/(..*)n(..*)n(..*)n/1n2n# snallie, `date +%F_%H%M%S_%a`n#3n/g }' Makefile
[root@www.linuxidc.com armboot-1.1.0]# vi +200 Makefile
改:
28 #define ARMBOOT_VERSION 'ARMboot 1.0.2'
为:
28 //#define ARMBOOT_VERSION 'ARMboot 1.0.2'
29 #define ARMBOOT_VERSION 'ARMboot 1.1.0' // snallie, 2011-05-24_093229_Tue
[root@www.linuxidc.com armboot-1.1.0]# sed -i'~' -e '/1.0.2/ {N; s/(..*)n///1n1/g; s/1.0.2'/1.1.0't// snallie, `date +%F_%H%M%S_%a`n/2;}' include/version.h
[root@www.linuxidc.com armboot-1.1.0]# vi +28 include/version.h
[root@www.linuxidc.com armboot-1.1.0]# make distclean; make mini2440_config; make all
** 进一步的移植,完成目标中的全部工作:驱动串口;驱动网络芯片dm9000;实现内核的下载(uImage);实现启动 Linux kernel(zImage),实现Nand Flash启动
*************************************************************************************************************************************************
mini2440板配置初步完成,下面进行具体的移植工作,由于SMDK2410 的代码和MINI2440板子略有出入,SMDK2410代码认为程序是直接在NOR或RAM中运行,
而我们的代码最终是烧写到NandFlash中的,可NandFlash不具有片上执行代码的能力,所以程序启动的第一步就是要将整个的程序从NandFlash中搬移到RAM中,
即TEXT_BASE(配置在board/mini2440/config.mk文件中)的起始地址上去。另外SAMSUNG的S3C2440的处理器在系统启动时候会自动将NandFlash的前4K的代码
移动到内部的4K大小的称为Steppingstone的SRAM中运行,所以搬移用的代码必须放到程序映像的头部的4K的范围内,否则不能正常启动。综上所述,对SMDK2410
代码的改造主要为:实现代码的搬移工作,并将搬移用的代码放到程序映像的头部的4K的范围内;而后要驱动串口,这样我们才能获取到程序的运行时的输出状态
信息,串口驱动不起来等于是瞎子一样,所以串口驱动很重要,有了串口还可通过串口下载小体积的代码;在这之后再驱动网络芯片,实现网络下载代码,启动内核等等。
在include/configs/config_smdk2410.h的宏定义CONFIG_SMDK2410进行控制,如下所示:
#define CONFIG_SMDK2410 1 /* on an SAMSUNG SMDK2410 Board */
[root@www.linuxidc.com armboot-1.1.0]# grep -rHn CONFIG_S3C2410 *
cpu/arm920t/interrupts.c:36:#elif defined(CONFIG_S3C2410)
cpu/arm920t/serial.c:25:#elif defined(CONFIG_S3C2410)
cpu/arm920t/start.S:134:#elif defined(CONFIG_S3C2410)
cpu/arm920t/start.S:153:#if defined(CONFIG_S3C2410)
include/configs/config_smdk2410.h:43:#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
上一篇:解决mini2440声卡全双工问题 实现同时录音及播放
下一篇:mini2440上移植sqlite3.7.6.2
推荐阅读最新更新时间:2024-11-14 01:19
- 热门资源推荐
- 热门放大器推荐
- PADS出GERBER时 焊盘丢失问题
- 得捷大赛代码
- 【2024 DigiKey创意大赛】环境灯源码
- mit the basic of motion control part1
An error occurred.
Sorry, the page you are looking for is currently unavailable.
Please try again later.
If you are the system administrator of this resource then you should check the error log for details.
Faithfully yours, OpenResty.
设计资源 培训 开发板 精华推荐
- MC78M06BDTRKG 6V 可调输出稳压器的典型应用
- 长距离TOF多机干扰系统
- LT1173、DC 至 DC 转换器从 3V 或 5V 产生 -24V
- LT4276AHUFD 25.5W(类型 2)PoE+ 电源在反激模式下的典型应用电路,具有 12V、1.9A 输出
- EVAL-ADM1062LFEB,评估 ADM1062ACP 电压监控器排序器的评估板
- EVAL-ADM1275EBZ,用于评估 ADM1275 热插拔控制器和电源监控的评估板
- TCR2LN32 200mA、3.2V输出电压CMOS低压降稳压器的典型应用
- MAX2165 DMB-TH USB加密狗参考设计
- 使用 Analog Devices 的 LTC2925CUF 的参考设计
- ASEK733KLA-40B-T-DK,使用 ACS733 电流传感器的评估板
- CGD和Qorvo将共同革新电机控制解决方案
- 是德科技 FieldFox 手持式分析仪配合 VDI 扩频模块,实现毫米波分析功能
- 贸泽开售可精确测量CO2水平的 英飞凌PASCO2V15 XENSIV PAS CO2 5V传感器
- 玩法进阶,浩亭让您的PCB板端连接达到新高度!
- 长城汽车研发新篇章:固态电池技术引领未来
- 纳芯微提供全场景GaN驱动IC解决方案
- 解读华为固态电池新专利,2030 叫板宁德时代?
- 让纯电/插混车抓狂?中企推全球首款-40℃可放电增混电池,不怕冷
- 智驾域控知多少:中低端车型加速上车,行泊一体方案占主体
- Foresight推出六款先进立体传感器套件 彻底改变工业和汽车3D感知
- 国家统计局发布10月工业数据,工业机器人产量降幅巨大!
- 打破合资垄断,国产四大“混动”技术崛起,谁最符合国人的需求?
- TDK研究出可穿透金属进行数据及能量传输的压电超声波技术
- Vishay推出vPolyTan聚合物钽片式电容器
- 大联大品佳集团Microchip、onsemi和amsOSRAM产品的LIN通讯方案
- 因为WiFi问题,小米11/Pro系列手机可免费申请半年延保服务
- 魅族17系列获推Flyme 9.2稳定版系统的更新
- OPPO Reno6光线追踪功能实机渲染演示:细节丰富
- 三星宣布重返云游戏 将给Tizen电视推出服务
- 诚迈科技成为HarmonyOS Connect ISV方案商,打造智能产品和场景