最近比较有空,拿出很久没有碰过的板子玩玩,看到内核以及busybox都更新了不少,手痒痒又做了一次移植。
编译器使用http://www.codesourcery.com/gnu_toolchains/arm/portal/subscription?@template=lite 2008q3的版本,GCC是4.3.2。
使用这个编译器编译arm920t的程序有个地方要注意,这个编译器支持armv5t,而2440是armv4t的片子,所以编译时要加上-march=armv4t。
内核编译时也要选上下面的选项,否则用这个编译器编出来的用户程序无法运行,最典型的错误是Busybox无法运行。
make menuconfig进入菜单进行配置,这里由于使用了codesourcery的工具链,此工具链支持EABI,所以选择
Kernel Features ->
[*]Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel
可以在CFLAGS中加入-march=armv4t,但实践证明有些程序不支持这样写,我在编译libfreetype时就没有通过,这样写才可以CC=arm-none-linux-gnueabi-gcc -march=armv4t
代码的修改可以参考旧的文章,基本一样。
Busybox的移植过程中有些情况搞得我郁闷了大半天,我是采用静态的方式生成busybox,开机后一直都无法login,调试发现busybox没有分析/etc/passwd文件。
解决方法:
Login/Password Management Utilities --->
[*] Use internal password and group functions rather than system functions
后来我做了一个自动login
在/etc/inittab中
s3c2410_serial0::respawn:/bin/sh
上面的是一个方法,也可以
s3c2410_serial0::respawn:/bin/login -f root
关于清除密码,可以改
/etc/passwd
root::0:0:root:/:/bin/sh
把第一和第二个冒号之间清空。
同时可以把默认的路径修改,这里把/root 改为/(红色的修改)
另外,在/etc/profile中设置了PS1,但没起作用,下面这个要选上
Busybox Library Tuning --->
[*] Fancy shell prompts