Chinaunix首页 | 论坛 | 博客
  • 博客访问: 453562
  • 博文数量: 133
  • 博客积分: 3259
  • 博客等级: 中校
  • 技术积分: 1255
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-14 13:49
文章存档

2012年(6)

2011年(112)

2010年(16)

分类:

2010-05-04 17:57:41

学习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 
 
这样就可以把补丁打到内核的fs目录里面.
之后再内核根目录执行
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!

配置好之后,保存,编译出镜像。
 
 
参考文章:
阅读(1727) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~