A simple embedded linux system

来源:互联网 发布:java配置文件放哪里 编辑:程序博客网 时间:2024/06/05 02:58

A simple embedded linux system

 

作者: elf () 站内: embedded
标题: [测试]简单embedded linux system
时间: Sat Nov 17 10:27:09 2001

最近关于embedded system是个很热门的话题,很多人都在问要
如何开始第一步?其实网络上关于这方面的信息已经很多了!不过
大部分还是以英文的数据为主啦!对于有英文恐惧症的人来说,真的
是非常痛苦 ^^.


好啦!废话不多说,其实要作一个可开机的小型linux system门坎并?
不高,以下就我的作法给不知道如何开始的人参考看看(高手看了
笑笑就好,因为这只是给不知道如何入门的新手看的^^||

工欲善其事,必先利其器;以下是我的工作环境:

CLE 1.0
128M
赛扬500
gcc-2.96-95

需要档案:
busybox0.60.1
下载地址:http://opensource.lineo.com/software.html

由于我只作一个可开机和具有简单shell指令的系统,打算一开机后不需登入
直接启动xterm,所以只需要下载busybox 即可,至于该网站上还有许多有趣
embedded项目,有兴趣的可以尝试看看。

步骤一:
先在自己的硬盘划分一个32M的分割区,例如:我在我第二颗硬盘(/dev/hdb)
建立一个工作环境/embedded_test/dev/hdb5),建好之后记得要格式化该
分割区(mke2fs /dev/hdb5)。

步骤二:
建立系统目录--
基本目录结构如下:

/--|----/bin
|
|----/boot
|
|----/dev
|
|----/etc
|
|----/home
|
|----/lib---/modules
|
|----/mnt
|
|----/proc
|
|----/root
|
|----/sbin
|
|----/usr-----|----/bin
| |
| |----/lib
| |
| |----/sbin
| |
| |----/share
|
|----/tmp
|
|----/var


基本上你可以将建目录树的过程写成script,这样你就不需要每次都一个
一个建立。

步骤三:
再来我们就可以编译我们的busybox!首先将busybox给解开来。
#tar zxvf busybox-0.60.1.tar.gz
?
进入busybox目录中
#cd busybox-0.60.1

编辑Config.h档案,这个档案可以决定我们要将那些功能加入busybox的执行?
檔中,例如:我要让busybox具有cp这个指令,就必须将
//#define BB_CP
前面的"//"批注拿掉。

修改init.c,为了让系统一起动时不需要作登入验证:
寻找 "if (get_enter == TRUE) {" <----大约是在第528
"getc(stdin);" <----542
"}" <----543
将他用"//"批注掉

另外,你可以修改第124行的"#define INIT_SCRIPT "/etc/rcS" /* Default sysinit script. */"
这个是用来设定开机时要先找那个档案作系统初始化设定,上面是我已经将他改成
去找/etc/rcS这个档案

接下来就是开始编译我们的busybox,指令如下:

#make
#make PREFIX=/embedded_test install <-----
busybox装到我们的工作目录

步骤四:
由于我需要一个全功能的shell所以我将系统中的bash复制到/embedded_test/bin
目录下(#cp -av /bin/bash /embedded_test/bin),接着建立连结(
#cd /embedded_test
#ln -s bash sh


步骤五:
复制相关lib到工作目录中,在这我们可以利用ldd这个指令检查我们需要那些lib
例如:
#ldd busybox
libc.so.6 => /lib/libc.so.6 (0x4002c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x400000000)

从这边我们就可以知道busybox需要libc.so.6ld-linux.so.2这两个档案(注意
一下,上面两个其实为连结,还需要复制相对应的lib过去)
依此方式也将bash需要用到的lib复制到工作目录中
TIPS:
复制过去的lib可以使用strip这个指令减肥

步骤六:
/dev中会用到的装置复制到我们的工作目录中:
console hda7 hdc3 loop3 ptyp7 ram2 tty ttyp2 vcs1 vcsa3
cua0 hdb hdc4 loop4 ptyp8 ram3 tty0 ttyp3 vcs2 vcsa4
cua1 hdb1 hdd mem ptyp9 ram4 tty1 ttyp4 vcs3 vcsa5
fb0 hdb2 hdd1 null ptypa ram5 tty2 ttyp5 vcs4 vcsa6
fd0 hdb3 hdd2 psaux ptypb ram6 tty3 ttyp6 vcs5 vcsa7
hda hdb4 hdd3 ptyp0 ptypc ramdisk@ tty4 ttyp7 vcs6 vcsa8
hda1 hdb5 hdd4 ptyp1 ptypd sda tty5 ttyS0 vcs7 vcsa9
hda2 hdb6 initctl| ptyp2 ptype sda1 tty6 ttyS1 vcs8 zero
hda3 hdb7 log| ptyp3 ptypf sda2 tty7 ttyS2 vcs9
hda4 hdc loop0 ptyp4 ram sda3 tty8 ttyS3 vcsa
hda5 hdc1 loop1 ptyp5 ram0 sda4 ttyp0 urandom vcsa1
hda6 hdc2 loop2 ptyp6 ram1 systty ttyp1 vcs vcsa2

注:需要那些装置请依自己需要,上面只是例子

步骤七:
编辑~embedded_test/etc/inittab
::sysinit:/etc/rcS
::askfirst:/bin/sh


编辑~embedded_test/etc/rcS
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export HOME=/root

mount -a

编辑~embedded_test/etc/fstab
none proc proc defaults 0 0

编辑~embedded_test/etc/passwd
root::0:0:root:/root:/bin/sh
nobody::99:99:Nobody:/:

编辑~embedded_test/etc/group
root::0:root
nobody::
/etc/ld.so.cache复制到~/embedded_test/etc/

编辑/etc/lilo.conf
因为我们初步只打算用自己系统的kernel来开机(编译kernel要说的太多了)
所以在lilo.conf中加上

image=/boot/vmlinuz-2.2.17-14
label=test
read-write
root=/dev/hdb5

然后执行lilo -v -v

步骤八:
接着重新开机,在开机选单中选test选项看能不能顺利进入系统中吧! ^^.
....本来还想接着写装上基本xterm的部份,ㄜ....下次有空再写好了
--
[1;32m
[33m硕诚 Linux 信息站 [37m [m
[1;31m
[36mc130.h061016061.is.net.tw[m
X-ifgh -> ifgh@mail.nc.cyut.edu.tw
X-0VO827QgjZ0.qDX0UvB. (03/10/08 20:54:18 )