前段时间,自己制作了一个yaffs2的根文件系统。系统正常启动了,所以便草草的写了一篇日志,记录一下。但是这两天在移植驱动的时候,忽然发现/dev目录下没有
任何设备文件,而且再上一个文件系统中也没有加载lib库,所以决定重新制作一下,并把步骤详细的记录一下。
1.安装busybox1.9.2.bz2
tar jxvf
2.修改其Makefile
ARCH ?= arm
CROSS_COMPILE ?=/usr/local/arm/3.3.2/bin/arm-linux-
3.编译
Make
关于这一步,需要说明的是,busybox不一定非要使用我所使用的版本,可以更换成更新的,但是设置方法是一致
4,make menuconfig
这一步没有什么值得特别说明的,大概的设置是不需要更改的,
就是你需要哪些命令就添加哪些命令,这个就自己探索吧。
libbusybox
[*] Produce additional busybox binary linked against libbusybox
[ ] Build with Large File Support (for accessing files > 2 GB)
installation option-->
[*] Don't use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
这个地方选中,把安装路径选择刚刚建立的目录 /home/skyily/rootfs
Busybox Library Tuning --->
MD5: Trade Bytes for Speed
[*] Faster /proc scanning code (+100 bytes)
[*] Support for /etc/networks
[*] Support for /etc/networks
[*] Additional editing keys
[*] vi-style line editing commands
[*] History saving
[*] Tab completion
[*] Username completion
[*] Fancy shell prompts
Linux Module Utilities --->
[*] Support version 2.6.x Linux kernels
[*] insmod
[*] Enable load map (-m) option
[*] Symbols in load map
[*] rmmod
[*] lsmod
[*] lsmod pretty output for 2.6.x Linux kernels
[*] modprobe
[ ] Multiple options parsing
[ ] Fancy alias parsing
--- Options common to multiple modutils
[ ] Support tainted module checking with new kernels
[ ] Support version 2.2.x to 2.4.x Linux kernels
[*] Support version 2.6.x Linux kernels
#make
#make install
编译通过,就生成了busybox。
7.制动生成rootfs文件夹
书写脚本文件rootfsdir
#! /bin/sh
echo "creatint rootfs dir......"
mkdir rootfs
cd rootfs
echo "making dir : bin dev etc lib proc sbin sys usr"
mkdir bin dev etc lib proc sbin sys usr #必备的8个目录
mkdir usr/bin usr/lib usr/sbin lib/modules
# Don't use mknod ,unless you run this Script as root !
# mknod -m 600 dev/console c 5 1
# mknod -m 666 dev/null c 1 3
echo "making dir : mnt tmp var"
mkdir mnt tmp var
chmod 1777 tmp
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/log var/run var/tmp
chmod 1777 var/tmp
echo "making dir : home root boot"
mkdir home root boot
echo "done"
#chmod 777 rootfsdir
#./rootfsdir
下面就是整理rootfs目录下的文件
6、以root身份建立节点文件/dev/console, /dev/null
# mknod -m 600 dev/console c 5 1
# mknod -m 666 dev/null c 3 1
7、建立配置文件如下:etc下
可先把busybox-1.9.2/example/bootflopy/etc下的文件拷贝到rootfs下的etc下#cp -r ..../busybox-1.9.2/examples/bootfloppy/etc/* ./
下面再做修改:
1>修改profile文件:
#!/bin/sh
#/etc/profile:system-wide .profile file for the Bourne shells
echo
echo -n "Processing /etc/profile......"
# Set search library path
export LD_LIBRARY_PATH=/lib:/usr/lib
# set user path
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
#Set PS1
echo "Set PS1 in /etc/profile"
export PS1="[\u@\h\W]\$"
echo "Done!"
2>修改inittab文件:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::restart:/sbin/init
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
3>修改fstab文件:
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
none /var ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
4>修改初始化脚本init.d/rcS
#! /bin/sh
echo "----------mount all"
/bin/mount -a
echo "----------Starting mdev......"
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
echo "*********************************************************"
echo " Be yourself"
echo " Do what you want"
echo "********************************************************"
5>为mdev创建配置文件:(etc下)
[root@ etc]# touch mdev.conf
创建一个mdev.conf文件,内容可为空!!!!
6>创建登陆账户
把自己pc上的/etc下的group shadow passwd 文件拷贝到制作的..../etc下
#cp /etc/group ./
#cp /etc/passwd ./
#cp /etc/shadow ./
8、动态编译时所要查的(所需动态链接库)
# arm-linux-readelf busybox
Dynamic section at offset 0xb8014 contains 22 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library:[libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000c (INIT) 0xc04c
0x0000000d (FINI) 0xa26f0
0x00000004 (HASH) 0x80e8
0x00000005 (STRTAB) 0xa384
0x00000006 (SYMTAB) 0x8b24
.....
.....
复制lib 文件到lib目录下:
[root@centos lib]cp -d /usr/local/arm/3.4.1/arm-linux/lib/ld* .
[root@centos lib]cp -d /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so .
[root@centos lib]cp -d /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 .
[root@centos lib]cp -d /usr/local/arm/3.4.1/arm-linux/lib/libm * .
[root@centos lib]cp -d /usr/local/arm/3.4.1/arm-linux/lib/libcrypt* .
关于lib库文件
可以用不同的版本
也可以从各个公司制作好的文件系统中抽取,也可以从交叉编译器中抽取,名字都差不多。
我也不太明白这些库都具体有什么作用,因为有一次制作忘记制作lib库了,系统照样可以运行。
等以后明白了再来加上这里吧,或者哪位兄台懂得话,留言指教啊。
关于user名字,添加自己喜欢的用户名,
只需要在rcS中添加
/bin/hostname -F /etc/hostname
然后再/etc目录下新建hostname ,编辑你想要的用户名。