ARM根文件系统制作

时间:2021-09-03 00:17:27

ARM根文件系统制作(For 2440)

1. 准备工作

Busybox源码:http://www.busybox.net/downloads/

# cd /home/liao

# tar –jxvf busybox-1.13.3.tar.bz2

# cd busybox-1.13.3

 

2. busybox编译

2.1修改Makefile

CROSS_COMPILE ?=arm-linux-

ARCH ?=arm

2.2 配置busybox

# make menuconfig

Busybox Settings--->

Build Options--->

[*] Build BusyBox as a static binary(no shared libs)

[*] Build with Large File Support(for accessing files>2GB)

       Installation Options->

[]Don’t use /usr

Applets links (as soft-links) --->

(./_install) BusyBox installation prefix        修改(./_install)/utu2440/rootfs

       Busybox Library Tuning --->

[*] vi-style line editing commands

[*]Fancy shell prompts

Linux Module Utilities--->

(/lib/modules)Default directory containing modules

(modules.dep)Default name of modules.dep

[ ] simplified modutils

[*] insmod

[*] rmmod

[*] lsmod

[*] modprobe

-----options common to multiple modutils

[ ] support version 2.2/2.4 Linux kernels

[*]Support tainted module checking with new kernels

[*]Support for module .aliases file

[*] support for modules.symbols file

Linux System Utilities --->

[*]Support /etc/mdev.conf

[*]Support command execution at device addition/removal

# make

# make install

编译出错:

networking/interface.c:818: error: `ARPHRD_INFINIBAND' undeclared here (not in a function)

networking/interface.c:818: error: initializer element is not constant

networking/interface.c:818: error: (near initialization for `ib_hwtype.type')

make[1]: *** [networking/interface.o] 错误 1

make: *** [networking] 错误 2

解决:在networking/interface.c文件中添加:

#define ARPHRD_INFINIBAND 32   /* InfiniBand */

 

编译后,在rootfs目录下会生成目录binsbinusr和文件linuxrc的内容

 

3. 建立根文件目录

    前面已经生成了binsbin等目录,这里建立一些必要的文件目录

# mkdir dev etc lib proc sys mnt tmp var home boot root

# mkdir usr/lib usr/modules

# mkdir etc/init.d etc/sysconfig

# mkdir mnt/etc mnt/jffs2 mnt/data mnt/temp

# mkdir var/lib var/lock var/run var/tmp

 

# chmod 1777 tmp

# chmod 1777 var/tmp

 

# sudo mknod -m 600 dev/console c 5 1

# sudo mknod -m 600 dev/null c 1 3

这两个设备节点需要root用户建立,具体原因有待研究

 

4. 建立etc目录配置文件

4.1 etc/mdev.conf文件,内容可有可无。

 

4.2 passwdgroupshadow文件,手动、自动创建

手动创建是根据规范手动编写这三个文件内容

# cat passwd

root:x:0:0:root:/root:/bin/sh

passwd一共由7个字段组成,6个冒号将其隔开。它们的含义分别为:

1     用户名

2     是否有加密口令,x表示有,不填表示无,采用MD5DES加密。

3     用户ID

4     ID

5     注释字段

6     登录目录

7     所使用的shell程序

 

#cat group

root:x:0:

group一共由4个字段组成,3个冒号将其隔开,它们的含义分别为:

1     组名

2     是否有加密口令,同passwd

3     ID

4     指向各用户名指针的数组

 

#cat shadow

root:$1$3jZ93Mwq$oaeef6lWIuThavs8wD0Wh1:0:0:99999:7:::

shadow一共由9个字段组成,8个冒号将其隔开,它们的含义分别为:

1     用户名

2     加密后的口令,若为空,表示该用户不需要口令即可登陆,若为*号,表示该账号被禁用。 上面的表示的是123456加密后的口令。

3     197011至口令最近一次被修改的天数

4     口令在多少天内不能被用户修改

5     口令在多少天后必须被修改(0为没有修改过)

6     口令过期多少天后用户账号被禁止

7     口令在到期多少天内给用户发出警告

8     口令自197011被禁止的天数

9     保留域

 

自动创建是使用busybox提供的adduserpasswd

在文件系统正常运行起来后,使用adduser命令,使用方法为:

#adduser root

然后就会在etc目录下自动生成passwd groupshadow文件。但是运行该命令后会打印出如下消息:

passwdunknown uid 0

这表示不能为该用户设置密码,此时你会发现要passwd命令也无法使用。解决的办法是,打开passwd文件,其内容为:

root:x:1000:1000:Linux User…:/home/root:/bin/sh

将用户ID和组ID均更改为0

打开group文件,其内容为:

root:x:1000:

同样将组ID改为0

然后,passwd命令就可以正常使用了。这时为root用户设置口令:

#passwd root

根据提示输入密码。其中,root用户登陆后的目录可以手动进行更改。

 

4.3 etc/inittab文件:

::sysinit:/etc/init.d/rcS

s3c2410_serial0::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a –r

 

4.4 etc/init.d/rcS文件:

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

echo "---------------mount all--------------"

mount -a

echo "---------------Start mdev-------------"

echo /sbin/mdev>/proc/sys/kernel/hotplug

mdev -s

echo "**************************************"

echo "Kernel version:linux-2.6.24"

echo "YC2440 rootfs"

echo "Designer:zechin.liao"

echo "Date:2010.12.22"

echo "**************************************"

/bin/hostname -F /etc/sysconfig/HOSTNAME

 

# chmod +x etc/init.d/rcS

 

4.5 etc/fstab文件:

#device   mount-point   type    option   dump   fack   order

proc          /proc     proc   defaults    0      0

none          /tmp      ramfs  defaults    0      0

sysfs         /sys      sysfs  defaults    0      0

mdev          /dev      ramfs  defaults    0      0

 

4.6 etc/profile文件:

#Ash profile

#vim:syntax=sh

#No core file by defaults

#ulimit -S -c 0>/dev/null>&1

export LD_LIBRARY_PATH=/lib:/usr/lib

PATH=$PATH

USER="id -un"

LOGNAME=$USER

PS1='[/u@/h /W]#'

HOSTNAME='/bin/hostname'

export USER LOGNAME PS1 PATH

 

暂时使用nfs挂载根文件,后面将介绍制作yaffsjffs文件。