一、添加内核引导 参考《u-boot-2009.08在mini2440上的移植(六)---增加引导内核功能 》(行数不够准确哦~)
【1】机器码的确定#if defined(CONFIG_CMD_KGDB)
还是把上面的IP统一了吧,这里复制我的才发现这个问题,难怪第一次不能用,还得配ip,原来这里的不同。
(3)制作能被u-boot直接引导的内核uImage# chmod a+x uImage
(4)nfs下载及写入到nand中如下(超级终端上复制的信息):
SMDK2410 # ping 192.168.0.224
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 12:12:12:12:12:1a
operating at unknown: 0 mode
Using dm9000 device
host 192.168.0.224 is alive
SMDK2410 # nfs 0x30008000 192.168.0.224:/uImage
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 12:12:12:12:12:1a
operating at unknown: 0 mode
Using dm9000 device
File transfer via NFS from server 192.168.0.224; our IP address is 192.168.0.223
Filename '/uImage'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
################################################T T T T T *** ERROR: Ca
nnot umount
还是老是有 *** ERROR: Cannot umount,不过不影响使用。
SMDK2410 # nand erase 0x60000 500000
NAND erase: device 0 offset 0x60000, size 0x500000
Erasing at 0x540000 -- 100% complete.
OK
SMDK2410 # nand write 0x30008000 0x60000 500000
NAND write: device 0 offset 0x60000, size 0x500000
5242880 bytes written: OK
SMDK2410 # nand read 30008000 0x60000 500000
NAND read: device 0 offset 0x60000, size 0x500000
5242880 bytes read: OK
这也还是那个问题,网上还有说是可能提供的大小有问题,我这里确定应该不是,因为内核才2.5MB。。。
最后一个问题是在前文构建的gcc下编译我们的u-boot。我把在Fedora下的u-boot文件夹直接打包,复制到debian下,编译,由于没有记录,这里只能是回忆了:
问题1:
首先是编译命令的问题,前面在makefile中设置交叉编译环境为arm-linux-gcc,原来生成的gcc是arm-none-linux-gnueabi-gcc,即使在makefile中改成目前的名字还是不能用。那么仿照原厂gcc的出来方法,采用ln -s为gcc、as等常用的建立链接,如
#ln -s arm-none-linux-gnueabi-as arm-linux-as
对于gcc和g++,可以和原厂一样,复制shell脚本,增加-march=armv4t
问题2:可能会出现某些文件找不到的情况,提示的目录是在fedora下的。
那应该是没有清理干净,可以先make clean,在make distclean
问题3:
开始编译了,走了会,冒出个--fix-v4bx not recognition,好像是这个来着,也碰到的人可以给我留言,我更正一下,不想再来次了。是as的问题。产生这个的原因是自己编译的gcc使用了EABI,但是一般支持的指令集不是我们使用的armv4的,虽然gcc修正了下,但是binutils工具集里的修正这里没有跟上(我的版本是2.18),需要补丁,想想干脆重新下了个binutils-2.20.1.tar.bz2,解压编译(单独编译它就可以了)安装。
问题4:
终于编译成功了,但是下载到板子上就是不运行;想想我的gcc把内核都可以没有的编译了,怎么这个不行了。在板厂官网上的解释是必须对应编译器版本,以为自己白折腾了,自己对比原厂gcc和我的gcc配置,又不知道从哪来搜得,发现只要在第二次编译gcc时,配置中指定上--with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t,相当于我就针对这类cpu、指令集了。
顺利通过,贴个启动信息:
U-Boot 2010.06 (Oct 17 2011 - 21:01:36)
DRAM: 64 MiB
Flash: 512 KiB
NAND: 256 MiB
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
NAND read: device 0 offset 0x60000, size 0x500000
5242880 bytes read: OK
## Booting kernel from Legacy Image at 30008000 ...
Image Name: mini2440_linux
Created: 2011-10-20 6:50:28 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2496644 Bytes = 2.4 MiB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux.............................................................
................................................................................
.................... done, booting the kernel.
Linux version 2.6.32.2-FriendlyARM (root@debian6) (gcc version 4.4.5 (GCC) ) #2
Fri Sep 23 17:09:08 CST 2011
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177
CPU: VIVT data cache, VIVT instruction cache
Machine: FriendlyARM Mini2440 development board
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C244X: core 405.000 MHz, memory 101.250 MHz, peripheral 50.625 MHz
好了就这么多了,还有些东西没有写,是自己操作的问题,希望实践的人自己体会了,希望鄙视的有问题的都留言告诉我。
参考文章:
1.u-boot-2009.08在mini2440上的移植(六)---增加引导内核功能 http://singleboy.blog.163.com/blog/static/54900194201141282946225/