分类: LINUX
2009-12-16 18:15:10
------------------修改编译配置选项--------------------
开始移植
1. 下载busybox1.9.2,并解压缩。
下载busybox源代码:
交叉编译工具:arm-linux-gcc-3.4.1
解压源码:tar -jxvf busybox-1.9.2.tar.bz2
2. 修改Makefile中的174行的 arch和编译工具链头。
ARCH ?= arm
CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-
3. make menuconfig. 修改编译配置选项。
Busybox Setting----->
build option-->
[ ] Build BusyBox as a static binary (no shared libs)
[*] Build shared libbusybox
[*] Produce a binary for each applet, linked against libbusybox
[*] Produce additional busybox binary linked against libbusybox
[ ] Build with Large File Support (for accessing files > 2 GB)
installation option-->
[*] Don't use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
Busybox Library Tuning --->
MD5: Trade Bytes for Speed
[*] Faster /proc scanning code (+100 bytes)
[*] Support for /etc/networks
[*] Support for /etc/networks
[*] Additional editing keys
[*] vi-style line editing commands
[*] History saving
[*] Tab completion
[*] Username completion
[*] Fancy shell prompts
Linux Module Utilities --->
[*] Support version 2.6.x Linux kernels
[*] insmod
[*] Enable load map (-m) option
[*] Symbols in load map
[*] rmmod
[*] lsmod
[*] lsmod pretty output for 2.6.x Linux kernels
[*] modprobe
[ ] Multiple options parsing
[ ] Fancy alias parsing
--- Options common to multiple modutils
[ ] Support tainted module checking with new kernels
[ ] Support version 2.2.x to 2.4.x Linux kernels
[*] Support version 2.6.x Linux kernels
shell -
[*] alias support
其他的用默认值
-----------------------编译busybox-----------------------
make
make
install
在busybox/_install
目录下会生成我们需要的文件。
修改_install/bin/busybox
的属性。为4755
chmod
4755 ./_install/bin/busybox
必须要修改属性,否则在busybox
中很多命令会受限
将编译好的busybox拷贝到/bin下面。
----------------------------------制作根文件系统-----------------------------------------
在busybox下建新文件系统根目录root
拷贝_install下文件至新root
在root先新建etc目录(主要就是系统的启动设置,都在这里)
在root新建lib目录(系统的启动进程需要库的支持,一般都是动态链接,所以必须要加全了,文件系统拿什么编译的就拿该编译器的库)
-----------------------/lib文件--------------------------------
/lib的库其实就是进行busybox编译的库,即交叉编译器的库,我们这里使用的是3.4.1(位置/usr/local/arm/3.4.1)。
#
cd /usr/local/arm/3.4.1/arm-linux/lib
# for file in libc
libcrypt libdl libm libpthread libresolv libutil
> do
>
cp $file-*.so rootfs/lib (复制到你做的文件系统的/lib目录下)
>
cp -d $file.so.[*0-9] rootfs/lib (同上)
>
done
# cp -d ld*.so* rootfs/lib
(同上)
-----------------系统配置文件的建立---------------------
--========/etc目录============
(1)profile文件
#Set
search library path
export
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
#Set user
path
PATH="/bin:/sbin:/usr/bin:/usr/sbin:"$PATH
alias ll='ls
-l'
#Set
PS1
USER="`id
-un`"
LOGNAME=$USER
PS1='[\u@\h
\W]\$ '
PATH=$PATH
export USER LOGNAME PS1 PATH
(说明:sh 的配置脚本:profile)
(2)fstab文件
proc
/proc proc defaults 0 0
none /tmp ramfs
defaults 0 0
mdev /dev ramfs defaults 0
0
sysfs /sys sysfs defaults 0 0
(说明:挂载文件系统的配置文件 :fstab)
ro 以只读模式加载该文件系统
user 允许普通用户加载该文件系统
quota 强制在该文件系统上进行磁盘定额限制
noauto 不再使用 mount -a 命令(例如系统启动时)加载该文件系统
3
若不需要转储就设置该字段为 0
根文件系统“/”对应该字段的值应该为 1 , 其他文件系统应该为 2。 若该文件系统无需在
启动时扫描则设置该字段为 0
(3)inittab文件
::sysinit:-/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount
-a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
(说明:init 进程执行需读取的配置文件:inittab 3 KERNEL 起来之后,将运行第一个进程--init,实际上执行的为 Busybox 的/sbin/init
(这里直接就是linuxrc) init 的工作是根据/etc/inittab 脚本来进行系统的初始化
2:格式:::runlevels:action:process
sysinit --指定运行的第一个程序/脚本
respawn -- 若该进程结束,init 会再起 一个进程执行同样的命令
ctrlaltdel —— 指定在用户按下 Ctrl-Alt-Del 时执行的命令
3 init 进程运行脚本: /etc/init.d/rcS,
(在 rcS 中挂载文件系统,并且执行脚本/usr/etc/rc.local--看具体配置如何)
3 在 rc.local 中继续设置,最后运行用户的启动运行脚本 init.sh
)
(4)创建/etc/init.d文件夹和rcS,在rcS中添加
#!
/bin/sh
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
echo "^ Welcome to YAFFS root filesystem! ^"
echo "^ soso ^"
echo
"^^^^^^^^^^^^^^^^09-3-18^^^^^^^^^^^^^^^^^^^^"
/bin/hostname
-F /etc/host
# mount all filesystem defined in "fstab"
ln -s /dev/vc/0 /dev/tty1
echo
"# mount all..........."
/bin/mount -a
echo
"# Starting mdev........."
#/bin/echo /sbin/mdev >
/proc/sys/kernel/hotplug
#mdev -s
#/sbin/ifconfig
lo 127.0.0.1
#/sbin/ifconfig eth0 192.168.0.55
#/sbin/route add
default gw 192.168.0.1
(说明:
(5)创建host文件
soso
(6)创建mdev.conf文件 (空文件)
(7)复制主机/etc/下面的文件passwd,
group, shadow 文件到/etc
#
cp /etc/group .
# cp /etc/passwd .
# cp /etc/shadow .
修改passwd中用户使用的shell名称。FC6上默认的为bash,而vivi只支持ash。
root:x:0:0:root:/root:/bin/bash
----> root:x:0:0:root:/root:/bin/ash
(说明:
格式:account:password:UID:GID:GECOS:directory:shell
account 用户段
password 密码段
UID user id 段
GID group id 段
GECOS: 信息段(可选)
directory 用户登陆目录
shell login 时运行的 shell
)
(8)修改各文件和文件夹的权限
#
chmod 755 /rootfs/etc/init.d/rcS
# chmod 755 /rootfs/etc/host
-------------yaffs文件系统映像的制作---------
使用mkyaffsimg程序可以把一个目录做成一个yaffs映像文件,然后使用usb下载到板子上。进入文件系统目录层,使用以下命令。
#mkyaffsimage
rootfs filesystem.yaffs
这样就会在该目录下生成rootfs.img映像文件,下载到开发板运行即可。
--------------cramfs文件系统映像的制作(cramfs压缩率比较高)------------
在FTP中下载cramfs-1.1.tar.gz,解压到自己设定的目录下,如:
tar
xzvf cramfs-1.1.tar.gz –C
/home/
进入生成有mkcramfs文件的目录下(一定要进入此目录,否则会提示找不到该命令)
输入命令:#./mkcramfs
/ rootfs rootfs.cramfs
在当前目录下即生成rootfs.cramfs映像文件。到此Linux操作系统移植完毕。