学习ARM.选择ARM.坚持ARM.
开发环境
- 主 机:VMWare--Fedora 11
- 开发板:TQ2440--256MB Nand, Kernel:2.6.30.4
- 编译器:arm-linux-gcc-4.3.3
弄了二天.移植了yaffs2文件系统到了我TQ2440上.总结一下.理理思路.
之前是自己移植的kernel.弄了好多天的内核,研究了一下移植的方法和思路.
然后就趁热移植了yaffs2文件系统.
一.
首先获取源码
之后执行里面的补丁包.
# tar -xjvf busybox-1.16.1.tar.tar
之后再内核根目录执行
make menuconfig
在文件系统里选择对yaffs2 的支持.
内核的其余配置根据之前的不变.
到此.移植文件系统对内核的配置就暂停.
二.
1. 修改并配置BusyBox 目录下的Makefile
然后进到源码中,修改Makefile 文件
ARCH ? =arm
CROSS_COMPILE =arn-linux-
然后输入:#make menuconfig,进入配置单:
然后配置如下:(没有列出的选项,可以采用默认,也可以根据自己的需要添加。)
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
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
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
--- Options common to multiple modutils
然后退回到根配置单,选择“Save Configuration to an Alternate File”选项,保存刚刚的配置为
TQ2440busy_config(自己随便取的名字),编译时调用的是.config文件.
3 .编译并安装BusyBox
在命令行输入:make;make install,编译结束后会在busybox-1.16.0
根目录下面生成一个名为“_install”的目录。
完成busybox 的编译之后,我们就可以进行文件系统的构建了。
在“/home/abc/tmp/”目录下面建立一个“rootfs”的目录,复制刚刚编译出来的busybox 的“bin”
目录、“sbin”目录、“usr”目录和“linuxrc”到“rootfs”目录下,然后新建“dev”、“etc”、“home”、 “lib”、“mnt”、“opt”、“proc”、“root”、“sys”、“tmp”、“var”和“web”目录,并在原有的“usr”目录下面 新建一个“lib”目录。
4. 添加内容
“dev”目录
下面的内容在内核挂载完毕文件系统后,系统会使用mdev 自动建立。
不过mdev 是调用init 进程来启动的,在使用mdev 构建“dev”目录前,init 进程需要用到“/dev/console”和“/dev/null”这两个设备文件,所以,我们需要在制作文件系统时静态创建这两个设备文件,方法如下:
#mknod console c 5 1
#mknod null c 1 3
如果不创建这两个设备文件,在文件系统启动时会出现错误信息.大概是不能初始化控制台。
“etc”目录
用来存放系统的配置文件。
在“etc”目录下面有如下常用的文件:
fstab:指明需要挂载的文件系统;
group:用户组;
inittab:init 进程的配置文件;
passwd:密码文件;
profile:用户环境配置文件;
mdev.conf:因为2.6.18 版本开始linux 放弃使用devfs 而采用udev(mdev 是udev 的简化版本),这里的
mdev.conf 文件可以是空,也可以按照一定规则来编写,这里我采用了为空;
resolv.conf:存放DNS 信息的文件,访问外网时需要DNS 的信息。
常用的目录有:
init.d 目录:启动文件目录,该目录下面有个“rcS”的文件,里面存放了系统启动时配置以及自启动加载
的进程等;
sysconfig 目录:在我们的文件系统里面,该目录下面存放了名为“HOSTNAME”的文件,该文件内容为:
embed_yw,这句话就是我们在文件系统里面看到那个“[root@ embed_yw/]” rc.d 目录:在我们的文件系统里面用来存放一些自启动所要调用的脚步等;
boa 目录:我们的文件系统特有的目录,用来存放web 服务器的配置脚本。
下面分别列出“etc”下面各个文件的内容。
【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
【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:jiajintao
501:x:501:jiajintao
【inittab】:参考busybox 源码下面的“examples/inittab”文件
# /etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
注意:上面红色部分在busybox 的参考文件中是ttySAC0,而在s3c24xx 系列芯片的串口驱动里面我们用了s3c2410_serial 做为设备名(在内核源码的“drivers/serial/s3c2410.c”文件的949 行),然后我们又是用的串口0 作为控制台的,所以这里我们使用s3c2410_serial0。
【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:/:
jiajintao:$1$8GIZx6d9$L2ctqdXbYDzkbxNURpE4z/:502:502:Linux User,,,:/home/jiajintao:/bin/sh
【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
【mdev.conf】:
暂时空
【resolv.conf】:
nameserver 202.96.128.166
【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 /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
注意:在上面红色部分是关于mdev 的使用,请参考busybox 的“docs/mdev.txt”文件。
最后还要改变它的属性使它能够执行。chmod +x etc/init.d/rcS
【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
【boa/boa.conf】:
空
【sysconfig/HOSTNAME】:
Embed_jiajintao
“home”目录
存放用户文件的目录,在这里,我建立了一个名为“jiajintao”的目录,前面的passwd 文里面有个用户名就是对应jiajintao这个目录
“lib”目录
常用的库文件,获取库文件的方法:
#cp -f /usr/local/arm/3.4.5/arm-linux/lib/*so* lib –a
构建了文件系统之后就可以用
#mkyaffs2image /busybox的目录 /自己的工作目录/yaffs2.bin
例如:
mkyaffs2image /usr/workspace/root_2.6.30.4/ /share/yaffs2.bin
然后就可以烧写了.写的不是很清楚,有的地方也是转载的.
先前启动不了.后来查到是这个原因.做个记录.
修改Kernel Features --->
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTA)
如果不选启动时会出现Kernel panic - not syncing: Attempted to kill init!
配置好之后,保存,编译出镜像。
参考文章:
阅读(1720) | 评论(0) | 转发(0) |