广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 5208 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
cute8161
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x2
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[Linux] 最小化 Linux 建置方法、步骤与观念
1. 准备 host computer
一开始我们必须建立一个工作平台 (即实验电脑 - host computer),也就是在 IBM PC 上安装 Linux distribution。建议使用的 Linux distribution 为 Red Hat Linux 6.2 以上的版本,因为我们并不需要使用到 kernel 2.4 的版本,因此选择安装 Red Hat Linux 6.2 做为实验环境。

您应具备的基本知识为:

编译 Linux kernel
Linux 管理技术
2. 选择 target device
target device (目的装置) 的选择较常见的有 floppy disk、flash memory。现在有很多 floppy disk + Linux (floppy disk) 的 project,要制作能安装在 floppy disk 上的最小化 Linux 并不难,一般的 Linux 开机磁片都可以称为最小化的 Linux (利用 mkbootdisk 指令制作开机片)。

不过我们的目的是要建立给 Embedded Systems 用的 Embedded Linux,因此至少要能符合 3 项基本需求:

完整 system libraries:为了能执行各种应用程式。
标准 filesystem hierarchy:为了能提高程式在不同 Linux 系统的相容性。
符合 Red Hat Linux 架构:为了能顺利将发展的程式由 host computer 移植到 target device。
在这里我们选择以 32M disk-on-Module 的 flash memory 做为 target device。

3. 在 target device 上建立 filesystem hierarchy
根据 Red Hat Linux 的阶层档案架构与 FHS 标准来建立 target device 的 filesystem hierarchy。我们可以在 host computer 上的空目录建立后再拷贝到 target device,或是直接将 target device mount 到 host computer,直接写入 target device。另外在 host computer 规划一个新的分割区也是很好的做法。

若想要使用 RAM disk image,则必须在 host computer 上建立整个系统。

4. 建立 device file
使用 mknod 来建立 device file,device file 应根据 Linux Allocated Devices 文件 (Documentation/devices.txt 或 http://www.lanana.org/...ce-list/) 来建立。通常我们只要建立会用到的 device file 即可。

在这里为了方便起见,我们直接拿 PeeWeeLinux 的 device files 套件来使用即可,因此 /dev 里的 device file 如下:

crw-------   1 root   root     5,   1 Jan 7 2000 console
lrwxrwxrwx   1 root   root         3 May 5 13:07 fb -> fb0
crw-r--r--   1 root   root     29,   0 Aug 15 2000 fb0
crw-r--r--   1 root   root     29, 32 Aug 15 2000 fb1
crw-r--r--   1 root   root     29, 64 Aug 15 2000 fb2
crw-r--r--   1 root   root     29, 96 Aug 15 2000 fb3
crw-r--r--   1 root   root     29, 128 Aug 15 2000 fb4
crw-r--r--   1 root   root     29, 160 Aug 15 2000 fb5
crw-r--r--   1 root   root     29, 192 Aug 15 2000 fb6
crw-r--r--   1 root   root     29, 224 Aug 15 2000 fb7
brw-------   1 root   root     2,   0 Jan 7 2000 fd0
brw-------   1 root   root     2,   1 Jan 7 2000 fd1
brw-r--r--   1 root   root   100,   0 Mar 5 2001 fla
brw-r--r--   1 root   root   100,   1 Mar 5 2001 fla1
brw-r--r--   1 root   root   100,   2 Mar 5 2001 fla2
brw-r--r--   1 root   root   100,   3 Mar 5 2001 fla3
brw-r--r--   1 root   root   100,   4 Mar 5 2001 fla4
crw-r--r--   1 root   root     1,   7 Jan 7 2000 full
brw-rw----   1 root   root     3,   0 Jan 7 2000 hda
brw-rw----   1 root   root     3,   1 Jan 7 2000 hda1
brw-rw----   1 root   root     3, 10 Jan 7 2000 hda10
brw-rw----   1 root   root     3, 11 Jan 7 2000 hda11
brw-rw----   1 root   root     3, 12 Jan 7 2000 hda12
brw-rw----   1 root   root     3, 13 Jan 7 2000 hda13
brw-rw----   1 root   root     3, 14 Jan 7 2000 hda14
brw-rw----   1 root   root     3, 15 Jan 7 2000 hda15
brw-rw----   1 root   root     3, 16 Jan 7 2000 hda16
brw-rw----   1 root   root     3,   2 Jan 7 2000 hda2
brw-rw----   1 root   root     3,   3 Jan 7 2000 hda3
brw-rw----   1 root   root     3,   4 Jan 7 2000 hda4
brw-rw----   1 root   root     3,   5 Jan 7 2000 hda5
brw-rw----   1 root   root     3,   6 Jan 7 2000 hda6
brw-rw----   1 root   root     3,   7 Jan 7 2000 hda7
brw-rw----   1 root   root     3,   8 Jan 7 2000 hda8
brw-rw----   1 root   root     3,   9 Jan 7 2000 hda9
brw-rw----   1 root   root     3, 64 Jan 7 2000 hdb
brw-rw----   1 root   root     3, 65 Jan 7 2000 hdb1
brw-rw----   1 root   root     3, 74 Jan 7 2000 hdb10
brw-rw----   1 root   root     3, 75 Jan 7 2000 hdb11
brw-rw----   1 root   root     3, 76 Jan 7 2000 hdb12
brw-rw----   1 root   root     3, 77 Jan 7 2000 hdb13
brw-rw----   1 root   root     3, 78 Jan 7 2000 hdb14
brw-rw----   1 root   root     3, 79 Jan 7 2000 hdb15
brw-rw----   1 root   root     3, 80 Jan 7 2000 hdb16
brw-rw----   1 root   root     3, 66 Jan 7 2000 hdb2
brw-rw----   1 root   root     3, 67 Jan 7 2000 hdb3
brw-rw----   1 root   root     3, 68 Jan 7 2000 hdb4
brw-rw----   1 root   root     3, 69 Jan 7 2000 hdb5
brw-rw----   1 root   root     3, 70 Jan 7 2000 hdb6
brw-rw----   1 root   root     3, 71 Jan 7 2000 hdb7
brw-rw----   1 root   root     3, 72 Jan 7 2000 hdb8
brw-rw----   1 root   root     3, 73 Jan 7 2000 hdb9
brw-------   1 root   root     22,   0 Jan 7 2000 hdc
brw-rw----   1 root   root     22,   1 Jan 7 2000 hdc1
brw-rw----   1 root   root     22, 10 Jan 7 2000 hdc10
brw-rw----   1 root   root     22, 11 Jan 7 2000 hdc11
brw-rw----   1 root   root     22, 12 Jan 7 2000 hdc12
brw-rw----   1 root   root     22, 13 Jan 7 2000 hdc13
brw-rw----   1 root   root     22, 14 Jan 7 2000 hdc14
brw-rw----   1 root   root     22, 15 Jan 7 2000 hdc15
brw-rw----   1 root   root     22, 16 Jan 7 2000 hdc16
brw-rw----   1 root   root     22,   2 Jan 7 2000 hdc2
brw-rw----   1 root   root     22,   3 Jan 7 2000 hdc3
brw-rw----   1 root   root     22,   4 Jan 7 2000 hdc4
brw-rw----   1 root   root     22,   5 Jan 7 2000 hdc5
brw-rw----   1 root   root     22,   6 Jan 7 2000 hdc6
brw-rw----   1 root   root     22,   7 Jan 7 2000 hdc7
brw-rw----   1 root   root     22,   8 Jan 7 2000 hdc8
brw-rw----   1 root   root     22,   9 Jan 7 2000 hdc9
brw-rw----   1 root   root     22, 64 Jan 7 2000 hdd
brw-rw----   1 root   root     22, 65 Jan 7 2000 hdd1
brw-rw----   1 root   root     22, 74 Jan 7 2000 hdd10
brw-rw----   1 root   root     22, 75 Jan 7 2000 hdd11
brw-rw----   1 root   root     22, 76 Jan 7 2000 hdd12
brw-rw----   1 root   root     22, 77 Jan 7 2000 hdd13
brw-rw----   1 root   root     22, 78 Jan 7 2000 hdd14
brw-rw----   1 root   root     22, 79 Jan 7 2000 hdd15
brw-rw----   1 root   root     22, 80 Jan 7 2000 hdd16
brw-rw----   1 root   root     22, 66 Jan 7 2000 hdd2
brw-rw----   1 root   root     22, 67 Jan 7 2000 hdd3
brw-rw----   1 root   root     22, 68 Jan 7 2000 hdd4
brw-rw----   1 root   root     22, 69 Jan 7 2000 hdd5
brw-rw----   1 root   root     22, 70 Jan 7 2000 hdd6
brw-rw----   1 root   root     22, 71 Jan 7 2000 hdd7
brw-rw----   1 root   root     22, 72 Jan 7 2000 hdd8
brw-rw----   1 root   root     22, 73 Jan 7 2000 hdd9
prw-------   1 root   root         0 Jan 7 2000 initctl
crw-r-----   1 root   root     1,   2 Jan 7 2000 kmem
brw-rw----   1 root   root     7,   0 Jan 7 2000 loop0
brw-rw----   1 root   root     7,   1 Jan 7 2000 loop1
brw-rw----   1 root   root     7,   2 Jan 7 2000 loop2
brw-rw----   1 root   root     7,   3 Jan 7 2000 loop3
brw-rw----   1 root   root     7,   4 Jan 7 2000 loop4
brw-rw----   1 root   root     7,   5 Jan 7 2000 loop5
brw-rw----   1 root   root     7,   6 Jan 7 2000 loop6
brw-rw----   1 root   root     7,   7 Jan 7 2000 loop7
crw-rw-rw-   1 root   root     1,   1 Jan 7 2000 mem
lrwxrwxrwx   1 root   root         5 May 5 13:07 mouse -> psaux
crw-rw-rw-   1 root   root     1,   3 Jan 7 2000 null
crw-r-----   1 root   root     1,   4 Jan 7 2000 port
crw-rw----   1 root   root     10,   1 May 6 1998 psaux
brw-r-----   1 root   root     1,   1 Jan 7 2000 ram
brw-rw----   1 root   root     1,   0 Jan 7 2000 ram0
brw-rw----   1 root   root     1,   1 Jan 7 2000 ram1
brw-rw----   1 root   root     1,   2 Jan 7 2000 ram2
brw-rw----   1 root   root     1,   3 Jan 7 2000 ram3
brw-rw----   1 root   root     1,   4 Jan 7 2000 ram4
brw-rw----   1 root   root     1,   5 Jan 7 2000 ram5
brw-rw----   1 root   root     1,   6 Jan 7 2000 ram6
brw-rw----   1 root   root     1,   7 Jan 7 2000 ram7
brw-rw----   1 root   root     1,   8 Jan 7 2000 ram8
brw-rw----   1 root   root     1,   9 Jan 7 2000 ram9
lrwxrwxrwx   1 root   root         4 May 5 13:07 ramdisk -> ram0
crw-r--r--   1 root   root     1,   8 Jan 7 2000 random
crw-rw-r--   1 root   root     10, 135 Jan 7 2000 rtc
brw-rw----   1 root   root     8,   0 May 6 1998 sda
brw-rw----   1 root   root     8,   1 May 6 1998 sda1
brw-rw----   1 root   root     8,   2 May 6 1998 sda2
brw-rw----   1 root   root     8,   3 May 6 1998 sda3
brw-rw----   1 root   root     8,   4 May 6 1998 sda4
brw-rw----   1 root   root     8, 16 May 6 1998 sdb
brw-rw----   1 root   root     8, 17 May 6 1998 sdb1
brw-rw----   1 root   root     8, 18 May 6 1998 sdb2
brw-rw----   1 root   root     8, 19 May 6 1998 sdb3
brw-rw----   1 root   root     8, 20 May 6 1998 sdb4
brw-rw----   1 root   root     8, 32 May 6 1998 sdc
brw-rw----   1 root   root     8, 33 May 6 1998 sdc1
brw-rw----   1 root   root     8, 34 May 6 1998 sdc2
brw-rw----   1 root   root     8, 35 May 6 1998 sdc3
brw-rw----   1 root   root     8, 36 May 6 1998 sdc4
brw-rw----   1 root   root     8, 48 May 6 1998 sdd
brw-rw----   1 root   root     8, 49 May 6 1998 sdd1
brw-rw----   1 root   root     8, 50 May 6 1998 sdd2
brw-rw----   1 root   root     8, 51 May 6 1998 sdd3
brw-rw----   1 root   root     8, 52 May 6 1998 sdd4
crw-------   1 root   root     4,   0 Jan 7 2000 systty
crw-rw-rw-   1 root   root     5,   0 Jan 7 2000 tty
crw-------   1 root   root     4,   0 Jan 7 2000 tty0
crw--w----   1 root   root     4,   1 Jan 7 2000 tty1
crw-------   1 root   root     4,   2 Jan 7 2000 tty2
crw-------   1 root   root     4,   3 Jan 7 2000 tty3
crw-------   1 root   root     4,   4 Jan 7 2000 tty4
crw-------   1 root   root     4,   5 Jan 7 2000 tty5
crw-------   1 root   root     4,   6 Jan 7 2000 tty6
crw-------   1 root   root     4,   7 Jan 7 2000 tty7
crw-------   1 root   root     4,   8 Jan 7 2000 tty8
crw-------   1 root   root     4,   9 Jan 7 2000 tty9
crw-------   1 root   root     4, 64 Jan 7 2000 ttyS0
crw-------   1 root   root     4, 65 Jan 7 2000 ttyS1
crw-------   1 root   root     4, 66 Jan 7 2000 ttyS2
crw-------   1 root   root     4, 67 Jan 7 2000 ttyS3
crw-r--r--   1 root   root     1,   9 Jan 7 2000 urandom
crw-rw-rw-   1 root   root     1,   5 Jan 7 2000 zero

5. 安装 glibc 至 target device
glibc 是标准 C 程式库,我们可以直接由 host computer 将 glibc 的档案拷贝到 target device。如果您想使用与 host computer 不同版本的 glibc,则要注意版本的向下相容性问题;不过建议 target device 与 host computer 的环境最好要一样,这样比较容易测试与除错。

因为 Linux 是支援 shared libraries 的 OS,所以 target device 与 host computer 的 glibc 版本不同也不需要重新编译所有的程式,除非 target device 不是在 x86 上执行,这时才需要做重新编译 (corss-compiling) 的动作。

glibc 也可以考虑改用专用给 Embedded Systems 用的 uClibc。

6. 建立 base Linux system
base Linux system 的建立包括安装其它 system libraries、utilities、compiler、shell ... 等等,至于到底应该要有什么基本系统,应参考 LSB 标准。另外 LFS 文件也只做为建立 base Linux system 的参考,但建议应以 LSB 标准为主。

另外 Lineo 公司也发展许多专门给 Embedded System 用的高品质软体,因此请使用底下 2 个专案套件:

(http://opensource.lineo...ects.html)

BusyBox (大量使用中的热门专案)
TinyLogin (大量使用中的热门专案)
前面提到的 uClibc 与有名的 uClinux 也都是 Lineo 公司的贡献。

7. 设定 init
init 的设定就比较容易了,我们只要根据 runlevel 来设定 /etc/inittab 即可。另外,如果要跟 Red Hat Linux 的 /etc/rc.d 架构相容,可以自行修改 BusyBox 里的 init.c 程式 (#define INIT_SCRIPT)。

8. 编译 Linux kernel
根据 target device 所在的硬体环境编译 Linux kernel。编译好后会得到 Linux kernel image (zImage/bzImage)。

9. 设定 boot loader
Linux 下的 boot loader 从老当益壮的 LILO、syslinux,到 grub 都可以使用。使用 DOM 的话,假如 boot loader 发生「not found BIOS drive」的话,只要手动做 BIOS 位址设定即可。以 LILO 为例,则是:

disk = /dev/hdc
bios = 0x80
boot = /dev/hdc

10. (参考) 使用 RAM disk image
前面 (~9.) 我们将 Linux 系统放在 physical 储存装置,如果您想让档案系统放在 RAM 里 (例如在 RAM 很多的 PC 上),可以使用 RAM disk 技术,将档案系统与 Linux kernel image 做成 compressed RAM disk image。

Embedded Linux 解决方案
前面我们介绍纯手工打造的最小化 Linux,不过就非特殊用途的场合来讲,现在有很多 Embedded Linux distribution 的现成解决方案可以给怕麻烦的人使用,我们可以不必亲自从零开始做起。例如 PeeWeeLinux、Embedded Debian 或其它商业性质的产品。

结语
在这里我们针对建立最小化 Linux 的观念做了介绍,Embedded Linux 系统的基础为最小化的 Linux,本文章说明制作最小化 Linux 的方法、步骤与观念。



献花 x0 回到顶端 [楼 主] From:台湾中华电信 | Posted:2005-11-22 19:10 |
mnbmnb5266
个人文章 个人相簿 个人日记 个人地图
小有名气
级别: 小有名气 该用户目前不上站
推文 x5 鲜花 x46
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

恩,原来如此,谢谢您的分享了,我会好好学写的


我的收藏
https://pan.baidu.com/s/1QUJ9lr_VzxXKRJAlBJgUQA
提取码:am2c
献花 x0 回到顶端 [1 楼] From:加拿大Rogers | Posted:2010-08-23 22:36 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.024964 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言