从此让繁忙盒子(busybox)的编译不再烦!
写于2009-05-04 作者:莫同学
工具及环境:
PC:Redhat9.0(Linux2.4)
Embedded:S3C2410(Linux2.6)
Busybox1.1.3、arm-linux版本3.3.2.(arm-linux3.4.1或者2.95.3有可能出问题)
1. 将Busybox压缩包拷贝到Redhat下(我用的是虚拟机)
从http://www.busybox.net/downloads/busybox1.1.3.tar.gz 下载
用tar -jvxf解压。
2. 在home下创建一个rootfs文件夹,用于制作根文件系统。
3.
4. 步骤如下:[root @root] # tar -jxvf busybos1.1.3.tar.gz
[root @root] # cd busybox1.1.3“进入文件夹”
[root @root] # make defconfig“设置为默认配置”
[root @root] # make menucofig“进入菜单设置,需要改几个小地方,
操作如图:
1)
回车进入Busybox Settings
2)
空格选中第一项Build。。。。。(选中后有*)
接着在第三项处(Do you。。。)空格选中,会在下面出来一个编译器路劲,如图
3)
按回车进入修改交叉编译器路径,如图
4)
注意:是根据自己的交叉编译器路径设置(最好用armlinux3.3.2,没有就网上下个,解压就行了)。
Ok确定。
接着回到主菜单(按Esc),进入Linux Moudle Utilities选项,如图
5)
一定要去掉Support version 2.2.0x to 。。。。。。。,否则出错
(:undefined reference to ‘query_module’
Modutils/lib.a(insmod.o)(.text.insmod_main+0xc38):In function ‘insmod_main’:
:undefined reference to ‘create_moudle’
Collect2:ld returned 1 exit status
Make: *** [busybox_unstripped[] Error 1 )。空格去选(按Esc返回住菜单)
6)接着选择主菜单下的Shells
进入
回车进入Chose your default shell(none)
要选择ash为默认shell解释器esc
忘了还有一点:在主菜单的Busybox Settings选项中General Configuration,选中Support for devfs!
然后esc。。。一直到这个界面出来。然后yes保存返回。
到此,环境配置完成。
还有一点很重要:修改busybox1.1.3下的e2fsprogs下的Makefile.in文件(这是bug),修改第51到55行为
$(patsubst %,$(E2FSPROGS_DIR)/%, $(BLKID_OBJS)):$(E2FSPROGS_DIR)/blkid
$(patsubst %,$(E2FSPROGS_DIR)/%, $(E2FSCK_OBJS)):$(E2FSPROGS_DIR)/e2fsck
$(patsubst %,$(E2FSPROGS_DIR)/%, $(E2P_OBJS)):$(E2FSPROGS_DIR)/e2p
$(patsubst %,$(E2FSPROGS_DIR)/%, $(EXT2FS_OBJS)):$(E2FSPROGS_DIR)/ext2fs
$(patsubst %,$(E2FSPROGS_DIR)/%, $(UUID_OBJS)):$(E2FSPROGS_DIR)/uuid
就是将| 去掉。
接下来[root @root] # make TARGET_ARCH=arm CROSS=arm-linux- PREFIX=/home/rootfs all install注意参数意义:
TARGET_ARCH目标平台arm的,检查编译器arm-linux-(注意最后的 - ),PREFIX则是要生成根文件系统的目录。
然后回车让它自己去make吧~~~~~~最后生成的bin都会在自己指定的那个根目录下。Bin、sbin、usr/sbin、usr/bin。
//
在开发板上使用时一般内核决定文件的读写权限。
默认是dev可写的,可以使用
1.mount -t ramfs ramfs /mnt命令将mnt文件夹设置成临时可写,重启开发板就没有了。
2.Mount -t yaffs /dev/mtdblock/2 /mnt 将yaffs文件系统挂载到开发板的mnt下(yaffs 就是 mtdblock/2那个结点)。
3.要实现障眼法的全部文件夹可写则可以先将原来根目录下的所有文件夹拷贝到/mnt下,因为当前mnt是可写的,到时候系统从mnt(yaffs)启动就可以了。
4.最关键的就是将系统启动从yaffs开始,这里使用的是vivi
5.Param set linux_cmd_line "noinitrd root=/dev/mtdblock/2 init=/linuxrc console=ttyS0"
6.Param save保存设置,重启开发板,系统就从yaffs启动(yaffs即为那个可写的mnt)。
7.这样就是障眼法的可写,实际上原来的那些root什么的都是浪费了。
8.注意要写在脚本中自动开机执行,否则还是会没有的。