解压busybox
# tar -xvf busybox-1.6.0.tar.bz2 .
# vi Makefile
# make menuconfig
在 make menuconfig 选择了静态编译,指令了安装路径
具体项的配置说明可参考百度文库中的这个链接,大神写的很详细
https://wenku.baidu.com/view/5d25420602020740be1e9b0b.html
# make && make install
编译时出现了两个错误
修改文件 applets/applets.c 第 21 行, 将 #error Aborting compilation. 注释
这个是编译工具链 netfilter.h 中少头文件 添加头文件:#include
这样就解决了busybox的编译问题
# make ARCH= arm CROSS_COMPILE=arm-linux- 这条命令中指定编译平台和编译器
# make CONFIG_PREFIX=/home/book/workspace/rootfs install 指定安装路径,
编译安装完成后在/home/book/workspace/rootfs会生成 bin, sbin linuxrc软连接文件(dev文件我后来创建的)
创建成功后接下来还需做什么工作呢?(借鉴大神图http://blog.csdn.net/czg13548930186)
mdev作用是在系统启动和热插拔或动态加载驱动程序时,自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的,mdev是通过init进程来启动的,在使用mdev构造/dev目录之前,init至少要用到设备文件/dev/console, dev/null,所以需要事先建立这两个设备文件
1,创建设备节点dev/console,dev/null
mkdir dev
cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
为什么主次设备号为5,1 和1,3 我们可以查看linux系统中的这两设备号
2. 创建必要的文件目录
# mkdir etc lib proc sys root mnt tmp
3. 构造/etc/inittab
添加文件(可以参照busybox中的example)
vi etc/inittab
#/etc/inittab
::sysinit:/etc/init.d/rcS /* 具体含义参考 http://blog.sina.com.cn/s/blog_aa9fb81a0102wbbe.html */
ttySAC0::askfirst:-/bin/sh /* /bin/sh是一个程序,会把标准输出、标准输入、标准错误定位到ttySAC0里面去,0号串号*/
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
4. 添加库文件(我们的库文件是基于编译器的,所以拷贝的是编译器的库文件)
将编译器中此目录的库文件拷贝到lib中
cp *.so* ~/workspace/rootfs/lib -d // -d含义是带软连接拷贝
接下来就是来配置etc目录了:
touch etc/inittab etc/fstab
touch etc/init.d/rcS -p
既然/etc/inittab 是第一个执行的文件 ,那么从此文件中我们看到有个sysinit ,所以我们需要在/etc 下创建一个rcS文件。
这个文件里面我们可以添加想自动执行的文件,如配置电脑的ip,挂载/etc/fstab指定的文件系统等.
#!/bin/sh
ifconfig eth0 192.168.0.100
mount -a //mount 某一具体的文件系统也行这里是mount所有。
mount -t tmpts mdev /dev //使用内存文件系统,减少对flash的读写
mkdir /dev/pts //用来支持外部网络链接的虚拟终端
mount -t devpts devpts /dev/pts
mount -t sysfs sysfs /sys //mdev通过sysfs文件系统获取设备信息
echo /sbin/mdev/ > /proc/sys/kernel/hotplug //设置内核,当有设备插拔时调用/bin/mdev程序
mdev -s //在/dev 目录下生成内核支持的所有设备的节点
然后给文件添加执行权限
# chmod +x etc/init.d/rcS
# chmod 777 profile inittab profile
mount -a 到底mount是什么东西呢?
它mount的是/etc/fstab中指定的文件系统 ,所以我们需要创建一个fstab
#device mount_point type options dump fsck order
proc /proc proc defaults 0 0
tempfs /tmp tmpfs default 0 0
sysfs /sys sysfs default 0 0
tmpfs /dev tmpfs default 0 0
创建完这个个主要的目录文件后,我们还需要创建其他的文件,他们可以为空
mkdir proc mnt tmp sys root
这样一个简单的根文件系统就做好了,我们可以通过网络挂载的方式去使用这个文件系统,当然也可以将这个跟问价系统烧到我们的开发板中去使用,但是烧到开发板中使用,我们就得将这个文件打包成镜像文件,需要使用到的工具: mkyaffsimage,
mkdyaffsimage rootfs rootfs.yaffs
使用tftp烧写:
tftp 0x30000000 rootfs.yaffs
nand erase 0xA0000000 0x36000000 //擦除指定地址的空间
nand write.yaffs 0x30000000 0xA0000000 (镜像的大小)
如果在开发板的文件系统中显示出现问题
不是:
而是:[\u@\h \W] \$这种形式的
需要在menuconfig 中添加支持