#1建立根文件系統(tǒng)目錄
#!/bin/sh
echo “——Create rootfs_new directons start…”
mkdir rootfs_new
cd rootfs_new
echo “——Create root,dev…”
mkdir bin sbin lib dev etc mnt usr
mkdir root home sys proc boot
mkdir tmp var
touch linuxrc
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/bin usr/sbin usr/lib usr/modules
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/log var/run var/tmp
chmod 1777 tmp
chmod 1777 var/tmp
echo “——Create dir done…”
#2創(chuàng)建設備文件
echo “——Make node in dev…”
mknod -m 600 mem c 1 1
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null c 1 3
mknod -m 644 dev/random c 1 8
mknod -m 644 dev/urandom c 1 9
mknod -m 660 dev/mtd0 c 90 0
mknod -m 660 dev/mtd1 c 90 2
mknod -m 660 dev/mtd2 c 90 4
mknod -m 660 dev/mtd3 c 90 6
mknod -m 660 dev/mtdblock0 b 31 0
mknod -m 660 dev/mtdblock1 b 31 1
mknod -m 660 dev/mtdblock2 b 31 2
mknod -m 660 dev/mtdblock3 b 31 3
mknod -m 660 dev/ttySAC0 c 204 64
mknod -m 666 dev/tty c 5 0
mknod -m 600 dev/tty0 c 4 0
mknod -m 600 dev/tty1 c 4 1
mknod -m 600 dev/tty2 c 4 2
mknod -m 600 dev/tty3 c 4 3
mknod -m 600 dev/ttyS0 c 4 64
mknod -m 600 dev/ttyS1 c 4 65
mknod -m 600 dev/ttyS2 c 4 66
mknod -m 600 dev/ttyS3 c 4 67
mknod -m 600 dev/ttyUSB0 c 188 0
mknod -m 600 dev/ttyUSB1 c 188 1
mknod -m 600 dev/ttyUSB2 c 188 2
mknod -m 600 dev/ttyUSB3 c 188 3
mknod -m 600 dev/ppp c 108 0
echo “——Make node done…”
echo “——Cp lib…”
#3建立動態(tài)鏈接庫
cp /usr/local/arm/3.4.1/arm-linux/lib/*.so* ./lib -d
echo “——Cp lib done”
4、交叉編譯Bosybox
A.修改Makefile交叉器
vim Makefile
CROSS_COMPILE =arm-linux- //第164 行
ARCH =arm //第189行
B.修改交叉編譯器路徑
make menuconfig
Busybox Settings —>Build Options —>
修改[*] Build BusyBox as a static binary (no shared libs)
修改Cross Compiler prefix為/usr/local/arm/3.4.1/bin/arm-linux-
C.修改安裝地址
make TARGET_ARCH=arm PREFIX=/source/tmp1/rootfs_new/
錯誤1:
miscutils/flash_eraseall.c:14:26: mtd/mtd-user.h: No such file ordirectory
find / -name “mtd-user.h”
/opt/linuxcore/linux-2.6.33.3/include/mtd/mtd-user.h
/usr/include/mtd/mtd-user.h
/usr/src/linux-headers-2.6.32-21/include/mtd/mtd-user.h
原因:找不到mtd-user.h
解決:
cp /usr/include/mtd/ ./include/mtd/ -a
錯誤2:
miscutils/inotifyd.c:31:25: sys/inotify.h: No such file or directory
find / -name “inotify.h”
/opt/linuxcore/linux-2.6.33.3/include/config/inotify.h
/opt/linuxcore/linux-2.6.33.3/include/linux/inotify.h
/opt/linuxcore/linux-2.6.33.3/fs/notify/inotify/inotify.h
/usr/include/linux/inotify.h
/usr/include/sys/inotify.h
/usr/src/linux-headers-2.6.32-21/include/linux/inotify.h
/usr/src/linux-headers-2.6.32-21-generic/include/config/inotify.h
/usr/src/linux-headers-2.6.32-21-generic/include/linux/inotify.h
原因:據(jù)說是busybox中ionice的bug
解決:
Miscellaneous Utilities->
關閉ionice
關閉inotifyd
關閉taskset
錯誤3:
networking/interface.c:818: error: `ARPHRD_INFINIBAND’ undeclared here(not in a function)
修改networking/interface.c
vim networking/interface.c
添加define ARPHRD_INFINIBAND 32 /* InfiniBand */
錯誤4:
util-linux/acpid.c: In function `acpid_main’:
util-linux/acpid.c:146: error: `EV_SW’ undeclared (first use in thisfunction)
util-linux/acpid.c:146: error: (Each undeclared identifier is reportedonly once
util-linux/acpid.c:146: error: for each function it appears in.)
util-linux/acpid.c:147: error: `SW_LID’ undeclared (first use in thisfunction)
原因:可能input.h太陳舊,沒有EV_SW的定義
解決:
cp /opt/linuxcore/linux-2.6.33.3/include/linux/ ./include/ -a
5.在Linux內(nèi)核中把module安裝到文件系統(tǒng)目錄 ,[疑問:是否是必須的?]
make modules_install INSTALL_MOD_PATH=/source/tmp1/rootfs_new/
5、建立etc目錄下的配置文件
A/etc/inittab #重要
#指定初始化文件
::sysinit:/etc/init.d/rcS
#啟動時執(zhí)行的shell
::respawn:/bin/sh
ttyS0::askfirst:-/bin/sh
#重啟時動作
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
#關機時動作,卸載所有文件系統(tǒng)
::shutdown:/bin/umount -a –r
B/etc/init.d/rcS #重要
C/etc/fstab #重要 ???
proc /proc proc defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
D/etc/profile #重要
#例子1
#!/bin/sh
echo “profile processing”
export LD_LIBRARY_PATH=/lib:/usr/lib
HOSTNAME=’bin/hostname’
export HOSTNAME
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
#例子2
# Set search library path
# 這條語句設置動態(tài)庫的搜索路徑,極其重要?。?!
echo “Set search library path int /etc/profile”
export LD_LIBRARY_PATH=/lib:/usr/lib
# Set user path
echo “Set user path in /etc/profile”
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
6、制作根文件系統(tǒng)映像文件
參考資料:
<<制作嵌入式根文件系統(tǒng)常見問題詳解>>
使用Busybox制作Cramfs根文件系統(tǒng).pdf
天嵌Linux移植.pdf