完成上一篇博文《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版本,如下:

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。