手里有个Dell TrueMobile 1184的无线路由,板子上面已经引出了串口,接上TTL线看了下启动信息,运行的是linux,打算自己编译个u-boot,跑uClinux玩玩。
先建立arm-linux-gcc 交叉编译环境:
在ubuntu下以root登录,
将 cross-2.95.3.tar.bz2 文件复制到 / 目录下,
安装:
# tar jxvf cross-2.95.3.tar.bz2
这个命令会在你的 /usr/local/arm/2.95.3 目录下安装 arm-linux-gcc 交叉编译程序,
然后在 PATH 变量中添加一项: /usr/local/arm/2.95.3/bin.
[root@localhost root]# export ATH=/usr/local/arm/2.95.3/bin:$PATH
测试:
把终端关闭,重新打开后执行如下命令:
# arm-linux-gcc –v
建立好交叉编译环境后可以试着编译 u-boot 了。
在/mnt/下面解压u-boot.1.1.2
tar xvf u-boot-1.1.2.tar.bz2
然后cd /mnt/u-boot.1.1.2
1) make distclean
2) make B2_config
3) make
悲剧,报错:make[1]: *** 没有规则可以创建“all”需要的目标“hello_world.srec”。 停止。
查了一下,有人说是make 3.81的一个BUG!http://blackfin.uclinux.org/gf/project/u-boot/tracker/?action =TrackerItemEdit&tracker_item_id=1324
可以简单的改一个目录 examples下的Makefile来解决。
将原文件的第58行开始的内容:
SREC = hello_world.srec
BIN = hello_world.bin hello_world
改为:
SREC = hello_world.o
BIN = hello_world.o hello_world
修改后运行,成功生成u-boot.bin文件! 终于搞定交叉编译环境!
现在开始做对应Dell TrueMobile 1184的编译。
u-boot-1.1.2/evb4510这个目录就是对应S3C4510的标准板子,这样就方便了,直接编译吧
make distclean
make evb4510_config
make
等待几分钟后,u-boot-1.1.2/已经生成u-boot.bin文件,至于Dell TrueMobile 1184这个板子能不能跑得起来,跑起来之后是不是一切正常,这个还得等明天试了才知道。
又放狗搜索,找到一个U-boot for s3c4510
,
看起来应该更适合我的路由器,那就下载下来编译下。
解压后make报错,提示没有arm-elf-gcc,这个uboot源码看来需要arm-elf-tools交叉编译环境,之前那个u-boot-1.1.2用的是arm-linux-gcc环境,两者貌似还不一样。
直接在linux里面wget下载arm-elf-tools-20040305.sh
,完成后chmod 777,执行报错:tail: cannot open `+43' for reading: No such file or directory
gunzip: stdin: unexpected end of file
抓狂,继续搜索,找到解决方案:
解决方法: 在Linux下(注:不要在Win下) 重新下载一个arm-elf-tools-20030314.sh
建议用VIM(注:不要在Win下)
将第39行的代码:
tail +${SKIP} ${SCRIPT} | gunzip | tar xvf –
改成如下:
tail -n +${SKIP} ${SCRIPT} | gunzip | tar xvf –
问题2:
gunzip: stdin: unexpected end of file
解决方法: 要在arm-elf-tools-20030314.sh 最后一行加入一空行(注,不要在Win下修改,建议用VIM)。
vim这个东西我用的不熟,这里记下过程,算是温故知新:
在正常模式里输入39j跳到第39行,按i进入编辑模式修改,搞定第一个问题;按esc回到正常模式,输入G跳到最后一行,输入o插入一行,搞定第二个问题;然后按esc回到正常模式,输入:wq保存退出,over。
./arm-elf-tools-20030314.sh,顺利安装完成。
切换到刚刚的uboot文件夹,make distclean
make evb4510_config
make
等待几分钟后编译完成,用winhex对比下前后两个u-boot.bin,发现很多地方不同,待明天分别刷进去试验下。