1.下載最新版本busybox(busybox-1.14.3.tar.bz2)
2.交叉編譯busybox
解壓進入其目錄,執行:
#make ARCH=arm-linux CROSS_COMPLIE=arm-linux- menuconfig
選擇編譯成動態庫載入模式(Build shared libbusybox)
CROSS_COMPLIER prefix(arm-linux)
ADDitional CFLAGS再填入-march=armv6
指定安裝目錄(./install)BusyBox installation prefix
後面用到
PS1='[/u@/h/W]/$'
分別表示的是目前使用者、主機名稱和目前的目錄
busybox settings->busybox library tuning->username completion、fancy shell prompts選上
#make
#make install
3.建立檔案系統目錄
#mkdir rootfs
#cd rootfs
#mkdir dev etc lib proc sys usr mnt tmp var
#cp (**/busybox/)install ./
#cp -rf (**/busybox/)examples/bootfloppy/etc/ ./
#sudo mknod -m 666 dev/console c 5 1
#sudo mknod -m 666 dev/ttyS0 c 4 64
#sudo mknod -m 666 dev/ttyS1 c 4 65
#sudo mknod -m 666 dev/null c 1 3
#cp /usr/local/arm/4.2.2-eabi/lib/ld* lib/
#cp /usr/local/arm/4.2.2-eabi/lib/libc-2.6.1.* lib/
#cp /usr/local/arm/4.2.2-eabi/lib/libc.so* lib/
#cp /usr/local/arm/4.2.2-eabi/lib/libm.so.6 lib/
#cp /usr/local/arm/4.2.2-eabi/lib/libm-2.6.1.so lib/
#cp /usr/local/arm/4.2.2-eabi/lib/libcrypt* lib/
#cp /usr/local/arm/4.2.2-eabi/usr/lib/libdl.so lib/
#cp /usr/local/arm/4.2.2-eabi/usr/lib/libpthread.so lib/
#cp /usr/local/arm/4.2.2-eabi/usr/lib/libz.so* lib/
#cp /usr/local/arm/4.2.2-eabi/usr/lib/libbz2.so lib/
#cp /usr/local/arm/4.2.2-eabi/usr/arm-unknown-linux-gnueabi/lib/libstdc++.so* lib/
#cd lib
#然後把同樣大小的檔案刪除一個,另一個用ln -s連結出來
類似這樣
rm libstdc++.so libstdc++.so.6
ln -s libstdc++.so.6.0.9 libstdc++.so
ln -s libstdc++.so.6.0.9 libstdc++.so.6
strip一下檔案系統:
#arm-linux-strip bin/busybox
#arm-linux-strip lib/*
udev配置
1、wget http://www.us.kernel.org/pub/linux/utils/kernel/hotplug/udev-100.tar.bz2
2、tar xjf udev-100.tar.bz2
3、cd udev-100 編輯Makefile,尋找CROSS_COMPILE,修改CROSS_COMPILE ?= arm-linux-
4、make
在嵌入式系統裡,我們只需要udevd和udevadm就能使udev工作得很好
把產生的udevadm,udevd複製到sbin目錄下,然後做下連結
ln -s udevadm udevcontrol
ln -s udevadm udevsettle
ln -s udevadm udevtrigger
修改etc下設定檔
etc/udev/udev.conf
內容可以為空白
etc/udev/rules.d目錄添加具體規則
-------------------------------------
更改為使用busybox內建的mdev,上面的藍色部分udev可以不用了
etc/mdev.conf
填入自己的mdev rules
etc/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
--------------------------------------------
etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin umount -a -r
::shutdown:/sbin/swapoff -a
--------------------------------------------
etc/profile
# /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
PS1='[/u@/h/W]/$'
#export PS1="//e[05;32m[$USER@//w//a]//$//e[00;34m"
PATH=$PATH
echo "Set local script:/usr/etc/rc.local...."
source /usr/etc/rc.local
echo "Done"
echo
--------------------------------------------
etc/hostname
arm-linux
--------------------------------------------
etc/init.d/rcS
#! /bin/sh
/bin/mount -a
# devpts doesn't mount since mounting /dev wipes /dev/pts
mkdir /dev/pts
date
echo "S: devpts"
mount -t devpts none /dev/pts
# Udev seems to throw a warning if /dev/null is not found
mknod /dev/null c 1 3
# Set hostname if the corresponding file is found
if test -e /etc/hostname; then
hostname -F /etc/hostname
fi
date
echo "S: udev"
if test -x /sbin/udevd ;
then
echo "Starting udev..." >> /boot.log
/sbin/udevd --daemon
echo "Trigger initial udev events..." >> /boot.log
/sbin/udevtrigger
echo "Waiting for the udevd to settle..." >> /boot.log
/sbin/udevsettle
fi
--------------------------------------
更改為使用mdev,上面藍色部分可以不要了
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s