ARM9开发—Linux文件系统的移植和制作(2)
完成上一篇博文《ARM9开发—Linux文件系统的移植和制作(1)》的内容,则表示所需编译的内容已完成。本节接着介绍如何手动添加系统文件,并构建最终版Linux文件系统。
1. 构建框架
在 /opt/Learn2440/ 目录下创建名为“root_2.6.30.4”的文件夹,并将之前编译好的,在 /opt/Learn2440/busybox-1.16.0/_install 目录下的内容复制到此文件夹。
mkdir /opt/Learn2440/root_2.6.30.4 cd /opt/Learn2440/busybox-1.16.0/_install cp -r * /opt/Learn2440/root_2.6.30.4/ cd /opt/Learn2440/root_2.6.30.4
如下:
2. 创建系统目录
(1)“dev”目录
sudo mknod -m 666 dev/console c 5 1 sudo mknod -m 666 dev/null c 1 3
(2)“etc”目录
mkdir etc cd etc touch fstab group initab medev.conf passwd shadow profile resolv.conf shadow mkdir init.d rc.d sysconfig
<1> fstab
#device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 var /dev tmpfs defaults 0 0 ramfs /dev ramfs defaults 0 0
<2> group
root:*:0: daemon:*:1: bin:*:2: sys:*:3: adm:*:4: tty:*:5: disk:*:6: lp:*:7:lp mail:*:8: news:*:9: uucp:*:10: proxy:*:13: kmem:*:15: dialout:*:20: fax:*:21: voice:*:22: cdrom:*:24: floppy:*:25: tape:*:26: sudo:*:27: audio:*:29: ppp:x:99: 500:x:500:sky 501:x:501:sky
<3> initab
# /etc/inittab ::sysinit:/etc/init.d/rcS tq2440_serial0::askfirst:-/bin/sh ::once:/usr/sbin/telnetd -l /bin/login ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r
<4> mdev.conf
sd[a-z]*[0-9] 0:0 0660 @(mount -t vfat -o iocharset=utf8 /dev/$MDEV /udisk) sd[a-z]*[0-9] 0:0 0660 *(umount /udisk) mmcblk[0-9]*p[0-9] 0:0 0660 @(mount -t vfat -o iocharset=utf8 /dev/$MDEV /sddisk) mmcblk[0-9]*p[0-9] 0:0 0660 *(umount /sddisk)
<5> passwd
root::0:0:root:/:/bin/sh ftp::14:50:FTP User:/var/ftp: bin:*:1:1:bin:/bin: daemon:*:2:2:daemon:/sbin: nobody:*:99:99:Nobody:/: sky:$1$8GIZx6d9$L2ctqdXbYDzkbxNURpE4z/:502:502:Linux User,,,:/home/sky:/bin/sh
<6> profile
# Ash profile # vim: syntax=sh # No core files by default #ulimit -S -c 0 > /dev/null 2>&1 USER="`id -un`" LOGNAME=$USER PS1='[\u@\h \W]# ' PATH=$PATH HOSTNAME=`/bin/hostname` export USER LOGNAME PS1 PATH
<7> resolv.conf
nameserver 202.96.128.86 nameserver 202.96.134.133
<8> shadow
保持为空,当使用passwd命令时需要该文件参与。
<9> init.d
init.d目录下新建rcS文件,脚本内容为:
#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel # # Trap CTRL-C &c only in this shell so we can interrupt subprocesses. # mount -a mkdir -p /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s mkdir -p /var/lock /bin/hostname -F /etc/sysconfig/HOSTNAME
创建完成后,分配可执行权限:
chmod –R 777 rcS
<10> rc.d
创建rc.d/init.d/ httpd,其脚本内容:
#!/bin/sh base=boa # See how we were called. case "$1" in start) /sbin/$base ;; stop) pid=`/bin/pidof $base` if [ -n "$pid" ]; then kill -9 $pid fi ;; esac exit 0
创建完成后,分配可执行权限:
chmod –R 777 httpd
<11> sysconfig
创建Sysconfig/ HOSTNAME文件,内容为:
EmbedSky
(3)“home”目录
创建一个名叫为“sky”的目录,用来存放用户文件,并设置其访问权限:
chmod –R 777 home/sky
(4)“lib”目录
将/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib中的*.so文件复制到/opt/Learn2440/root_2.6.30.4/lib目录。
cd /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib cp *.so* /opt/Learn2440/root_2.6.30.4/lib cd /opt/Learn2440/root_2.6.30.4/lib rm libwv* libuniconf*
(5)创建其它目录
创建其它一些可能用到的目录,指令如下:
cd /opt/Learn2440/root_2.6.30.4 mkdir mnt opt proc root sys tmp var web usr/bin
<1> mnt
mnt中添加udisk 和 sd两个文件夹。
mkdir mnt/udisk mnt/sd
<2> /usr/bin
复制串口文件传输的命令,可从官方提供的文件系统中拷贝。
cd /opt/EmbedSky/root_qtopia_2.2.0_2.6.30.4/usr/bin cp rb rx rz sb sx sz /opt/Learn2440/root_2.6.30.4/usr/bin cd /opt/Learn2440/root_2.6.30.4/usr/bin
3. 修改串口驱动
(1) mach-smdk2440.c
编辑 ./linux-2.6.30.4/arch/arm/mach-s3c2440/mach-smdk2440.c ,修改第99行内容为:
.ulcon = 0x03,
(2) samsung.c
编辑 /opt/Learn2440/linux-2.6.30.4/drivers/serial/samsung.c文件。
第53行添加内容如下:
#include <mach/regs-gpio.h>
第433行添加内容如下:
if (port->line == 2) { s3c2410_gpio_cfgpin(S3C2410_GPH6, S3C2410_GPH6_TXD2); s3c2410_gpio_pullup(S3C2410_GPH6, 1); s3c2410_gpio_cfgpin(S3C2410_GPH7, S3C2410_GPH7_RXD2); s3c2410_gpio_pullup(S3C2410_GPH7, 1); }
第888行修改内容如下:
.dev_name = "tq2440_serial",
4. 制作文件系统镜像
利用mkyaffs2image工具进行文件系统打包,如下:
mkyaffs2image root_2.6.30.4 root_2.6.30.4.bin
将最终uboot、zImage.bin、root_2.6.30.4.bin 下载的开发板中。
5. 启动系统
将移植后镜像启动信息与官方默认镜像进行对比,如下:
6. 终端显示
登陆Linux系统成功后,查看busybox版本,如下: