转载请注明出处:http://writeblog.csdn.net/PostEdit.aspx?entryId=5826373
一、系统版本选择
交叉编译器版本4.4.0
内核版本2.6.30.8
busybox版本1.16.2
二、内核编译
修改Makefile, ARCH=arm, CROSS_COMPILE=arm-eabi-。
make mrproper
make versatile_defconfig
添加eabi支持:[*] Use the ARM EABI to compile the kernel
添加虚拟文件系统tmpfs支持。
make
三、busybox编译、裁剪
1.make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- defconfig
2.make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig
a.选择上静态编译。
b.Busybox Library Tuning --->
[*] Username completion
[*] Fancy shell prompts
这两项必须选上,不然BusyBox将无法识别环境变量PS1里的参数。
3.make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- install
四、创建根文件系统
mkdir -v {dev,proc,sys,etc,lib,tmp,bin,sbin,usr}
mkdir -v usr/include
mkdir -v usr/lib
chmod 1777 tmp
添加两个必要的结点
sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 666 dev/null c 1 3
在etc/下创建文件:hostname、init.d/rcS、inittab、profile
复制busybox中的_install目录到root目录下。
/etc/inittab
# System initialization.
#/etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
五、添加mdev支持
在rcS中添加:
mount -t sysfs sysfs /sys
mount -t proc none /proc
sysctl -w kernel.hotplug=/sbin/mdev
mdev -s
六、ubunut下添加nfs的支持
/etc/exports添加:
/home/xxxxx/root *(rw,sync,no_root_squash)
重新启动nfs:
sudo /etc/init.d/nfs-kernel-server restart
七、qemu启动arm-linux系统
1.添加qemu的启动脚本:qemu-ifup
#!/bin/sh
echo "Executing /etc/qemu-ifup"
#echo "Bringing up $1 for bridged mode..."
sudo ifconfig $1 10.0.0.1
#echo "Adding $1 to br0..."
#sudo /usr/sbin/brctl addif br0 $1
#sleep 2
2.运行qemu:
sudo qemu-system-arm -M versatilepb -kernel zImage /
-append root="/dev/nfs nfsroot=10.0.0.1: /home/xxxxx/root rw /
ip=10.0.0.2:10.0.0.1:10.0.0.1:255.255.255.0" -net nic,vlan=0 /
-net tap,vlan=0,ifname=tap0,script=./qemu-ifup
八、令arm-linux可以用nat方式上网
1.主机端设置iptables:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -s 10.0.0.1/24 -j MASQUERADE
2.arm-linux系统添加文件/etc/resolv.conf指定dns服务器:
nameserver 192.168.1.1
九、ramdisk方式启动时,制作initrd映象文件
#mkdir initrd
#dd if=/dev/zero of=initrd.img bs=1k count=4096
#/sbin/mke2fs -F -v -m0 initrd.img
#mount -o loop initrd.img initrd
#cp -av rootfs/* initrd
#umount
#gzip -9 initrd.img
启动命令:qemu-system-arm -M versatilepb -kernel linux-source/linux/arch/arm/boot/zImage -initrd initrd.img.gz -append root="/dev/ram0 rw"