尝试initramfs+klibc

尝试initramfs+klibc

作者: zjujoe 转载请注明出处

Emailzjujoe@yahoo.com

BLOGhttp://blog.csdn.net/zjujoe

 

前言

klibc 来做 initramfs uclibc + busybox 方案比较一下。

 

编译

获取 klibc 最新版本klibc-1.5,阅读文档: usr/klibc/README

根目录下建立到内核的 link:

klibc-1.5>ls -l linux

lrwxrwxrwx 1 zjujoe zjujoe 59 2008-11-01 10:17 linux -> /home/zjujoe/svn/mhlv_2.6/working/songlixin/20081007_kernel

设置环境变量

export KLIBCARCH=arm

export CROSS_COMPILE=arm-iwmmxt-linux-gnueabi-

编辑:defconfig:

ONFIG_KLIBC=y

CONFIG_AEABI=y

修改 Kbuild, 不编译 kinit gzip (对我们没用,而且编译kinit时会出错)

执行 make

得到所需的静态、动态链接的程序。

得到的静态链接的程序

下面列出我们需要的可执行程序:

root@zjujoe-vm2:/opt/klibc-1.5/usr/dash# ls -l sh

-rwxr-xr-x 1 root root 82644 2008-11-01 11:29 sh

root@zjujoe-vm2:/opt/klibc-1.5/usr/utils/static# ls -l insmod

-rwxr-xr-x 1 root root 15136 2008-11-01 11:29 insmod

-rwxr-xr-x 1 root root 15888 2008-11-01 11:29 mount

-rwxr-xr-x 1 root root 14740 2008-11-01 11:29 mknod

root@zjujoe-vm2:/opt/klibc-1.5/usr/kinit/run-init/static# ls -l run-init

-rwxr-xr-x 1 root root 16280 2008-11-01 11:03 run-init

 

做成文件系统:

|-- bin

|   |-- mknod

|   |-- mount

|   `-- sh

|-- dev

|   |-- console

|   `-- stl4

|-- init

|-- lib

|   `-- modules

|       `-- 2.6.21

|           |-- rfs.ko

|           |-- xsr.ko

|           `-- xsr_stl.ko

|-- newroot

`-- sbin

    |-- insmod

    `-- run-init

得到的动态链接的程序:

root@zjujoe-vm2:/opt/klibc-1.5/usr/klibc# ls -l klibc-f*

-rwxr-xr-x 2 root root 29456 2008-11-01 11:03 klibc-fZteMV3jM8T7LslxGFaVO6Efwko.so

root@zjujoe-vm2:/opt/klibc-1.5/usr/kinit/run-init/shared# ls -l run-init

-rwxr-xr-x 1 root root 2144 2008-11-01 11:03 run-init

root@zjujoe-vm2:/opt/klibc-1.5/usr/dash# ls -l sh.shared

-rwxr-xr-x 1 root root 66188 2008-11-01 11:29 sh.shared

root@zjujoe-vm2:/opt/klibc-1.5/usr/utils/shared# ls -l

-rwxr-xr-x 1 root root  1568 2008-11-01 11:29 insmod

-rwxr-xr-x 1 root root  1624 2008-11-01 11:29 mknod

-rwxr-xr-x 1 root root  1872 2008-11-01 11:29 mount

 

做成文件系统:

|-- bin

|   |-- mknod

|   |-- mount

|   `-- sh

|-- dev

|   |-- console

|   `-- stl4

|-- init

|-- lib

|   |-- klibc-fZteMV3jM8T7LslxGFaVO6Efwko.so

|   `-- modules

|       `-- 2.6.21

|           |-- rfs.ko

|           |-- xsr.ko

|           `-- xsr_stl.ko

|-- newroot

`-- sbin

    |-- insmod

    `-- run-init

Init 脚本

按照如下写 /init 脚本(和uclibc 那个稍有改变)

 

#! /bin/sh

insmod /lib/modules/2.6.21/xsr.ko

insmod /lib/modules/2.6.21/xsr_stl.ko

insmod /lib/modules/2.6.21/rfs.ko

mount -o codepage=cp437 -t rfs /dev/stl4 /newroot

mount -t tmpfs none /newroot/dev

mknod /newroot/dev/console c 5 1

exec run-init /newroot /sbin/init --debug

对比

我们使用同样的 bootloader, 同样的内核,只有 initramfs 内容不一样,统计大小及启动到真正的文件系统的时间。

大小:

-rw-r--r-- 1 zjujoe zjujoe 221231 2008-11-01 14:31 rootfs_initramfs.klibc.shared.tgz

-rw-r--r-- 1 zjujoe zjujoe 232386 2008-11-01 15:39 rootfs_initramfs.klibc.static.tgz

-rw-r--r-- 1 zjujoe zjujoe 231099 2008-11-01 15:40 rootfs_initramfs.uclibc.static.tgz

 

方案

程序(libc/mknod/insmod)大小总和

启动到 rfs init命令行时间

uclibc + busybox static

118196

2.05

klibc+buildin uitl static

144688

2.24

klibc+buildin uitl dynamic

102852

2.24

 

考虑到 uclibc + busybox 的灵活性及程序度, 选择使用 方案1.

 

参考文档

http://bbs.linuxeden.com/archiver/tid-160356.html

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值