U-boot 移植
U-boot,全称为Universal Boot Loader ,即通用Bootloader,是遵循GPL条款的开源代码项目。为是德国DENX小组的创建的工程。
开发板:FL2440 烧录工具:J-link 下载工具:tftp32 串口工具:340
编译工具:Builroot-2011.11交叉编译器 调试终端:secureCRT
U-boot版本:u-boot-2010.09
U-boot所有版本下载地址为:ftp://ftp.denx.de/pub/u-boot/
U-boot移植准备:将自己的SecureCRT通过网络与虚拟机桥接
使用SecureCRT完成以下操作:
1.创建开发板移植目录结构
首先我们创建开发板移植相关的目录结构,除了移植 u-boot 的 u-boot 以外,我们还将今后移植的 Linux 内核,根文件系统,驱动,第三方应用程序以及我们自己写的相关程序都放到相应的目录下。
2.准备 u-boot 源码
3.U-boot 源码中添加 FL2440 开发板
4.U-boot 初步编译测试
这时候编译出来的 u-boot.bin 就是要烧到开发板上的 u-boot 文件,但这个代码是基于smdk2410 开发板的,我们并没有对这个代码作任何的修改,所以这个 bin 文件只能在smdk2410 这个开发板上跑。如果想运行在 FL2440 这个开发板上,接下来我们就要开始对源代码进行修改。
这里是根据郭工给的u-boot移植文档完成初步修改,修改目录如下(内容略):
5.U-boot 移植之第一阶段汇编代码分析与修改
5.1 start.S 分析与修改
5.2 lowlevel_init.S 分析与修改
5.3 添加 nand_read.c 源文件
6.U-boot 移植之第二阶段 C 代码修改
6.1 添加 CONFIG_S3C2440 条件编译
6.2 J-link 下载运行测试
6.3 添加网络支持
7. 安装下载Notepad++,根据郭工给的4个patch文件继续修改
8.修改完成后make,找到修改的错误接着按照正确的继续修改,全部正确后从虚拟机中将自己的u-boot.bin文件调出,用J-link、SecureCRT和FL2440开发板进行烧录(烧录流程可参照本人博客:开发板烧录)。
以下是SecureCRT的部分过程:
U-Boot 2010.09 (Jul 17 2016 - 06:37:40)
DRAM: 64 MiB
NAND: 256 MiB
*** Warning - bad CRC or NAND, using default environment
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
[fl2440@lingyun]# set ipaddr 192.168.1.113
[fl2440@lingyun]# set serverip 192.168.1.2
[fl2440@lingyun]# tftp 30008000 u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:51
could not establish link
Using dm9000 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.113
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: T
TFTP error: 'File not found' (1)
Not retrying...
[fl2440@lingyun]# tftp 30008000 u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:51
could not establish link
Using dm9000 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.113
Filename 'u-boot.bin'.
Load address: 0x30008000
Loading: ##########
done
Bytes transferred = 145228 (2374c hex)
[fl2440@lingyun]# nand erase 0 100000 (先擦再写)
NAND erase: device 0 offset 0x0, size 0x100000
Erasing at 0xe0000 -- 100% complete.
OK
[fl2440@lingyun]# nand write 30008000 0 50000
NAND write: device 0 offset 0x0, size 0x50000
327680 bytes written: OK
[fl2440@lingyun]# reset
resetting ...
U-Boot 2010.09 (Jul 17 2016 - 06:37:40)
DRAM: 64 MiB
NAND: 256 MiB
*** Warning - bad CRC or NAND, using default environment
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
NAND read: device 0 offset 0x100000, size 0x800000
8388608 bytes read: OK
## Booting kernel from Legacy Image at 30008000 ...
Image Name: Linux Kernel
Created: 2015-10-22 7:33:31 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 7887908 Bytes = 7.5 MiB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
******************************
此处省略N行.......
******************************
UBIFS: media format: w4/r0 (latest is w4/r0)
UBIFS: default compressor: lzo
UBIFS: reserved for root: 1651507 bytes (1612 KiB)
dm9000 dm9000.0: eth0: link down
dm9000 dm9000.0: eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
Copyright (C) 2012 GuoWenxue<guowenxue@gmail.com>
Default Password: 12345
WirelessRouter login: root
Password:
~ >: ls
apps data home lib media proc stat usr
backup dev info linuxrc mnt root sys var
bin etc init logs opt sbin tmp
到此烧录完毕,成功完成U-boot移植(注:我没有进行上述6.2及6.3的过程,所以烧录结果仅供参考)。
U-boot移植过程遇到的问题及解决办法:
1.刚开始做时文档修改过程中由于不够细心出现很多修改错误。
如:
解决办法:耐心修改,投入不少精力,重复改过不下4次,重做3次。
2.一开始许多文件操作命令不记得导致进度缓慢。
解决办法:重新看了文件操作命令的视频和通过百度重新学习。
3.烧录过程由于流程比较生疏导致进度缓慢。
解决办法:重新查看自己的博客总结,熟悉原理,结合实践.