组建I-linux & U-linux的家园
I-linux
全部博文(93)
2011年(1)
2009年(26)
2008年(66)
可怜的猪
农民伯伯
15889968
mordorww
ah199022
密林三木
lwchsz
a4651386
huzk4409
分类: LINUX
2009-03-09 17:34:13
三十二、编译klibc (1)在下载klibc的源码,目前最新版本是1.5。 (2)解开源码,并在顶层目录建立一个符号链接linux,指向linux的内核源码。注意,内核源码必须已通过make menuconfig等命令配置好。 (3)执行 make 命令,编译klibc。编译完成后,在klibc源码目录树中的usr/dash 和 usr/utils 目录中有shell和一些常用的命令, 它们分成静态链接和动态链接的2种版本,分别在static和shared目录下。为了简单,我们的initramfs就使用静态编译的版本。动态链接的程序需要使用klibc的动态库文件,位于 usr/klibc/目录下。 三十三、run-init命令 与busybox类似,klibc中也有一个切换到真实根文件系统的命令,它就是run-init命令。run-init命令的使用格式与busybox中的switch_root 命令一样,它有2个参数:第一个是已挂载了真实根文件系统的目录;第二个是真实根文件系统中的init程序路径名,一般是 /sbin/init 。即 run-init /newroot /sbin/init 语句即可从initramfs切换到挂载在/newroot目录下的真实根文件系统,并执行其中的 /sbin/init 初始化程序。 三十四、试一试 现在我们已经有了编译好的klibc,也了解了关键的run-init命令,那么就可以试试用klibc来构建initramfs。我们用QEMU作为试验环境,并假设在/dev/hda8上有linux系统,根文件系统是ext3。(1) 拷贝所需的命令到image构建目录把klibc中的usr/dash/sh、usr/utils/static目录下的mount、mknod命令拷贝到image/bin目录下。把usr/kinit/run-init/static/run-init命令拷贝到image/sbin目录下。klibc的静态编译版本命令不需要库文件,所以不需要拷贝。(2)创建硬盘的设备文件为了简单,我们不使用udev的方式创建设备文件,而是直接用mknod命令创建硬盘的设备文件。对于IDE硬盘/dev/hda,它的主设备号是3,次设备号是0,是块设备类型,所以用下面的命令在image/dev目录下创建它对应的设备文件mknod dev/hda b 3 0/dev/hda上的分区的主设备号也是3,次设备号与分区号相同,据此可以创建/dev/hda1 ~ /dev/hda8的设备文件。(3)创建/init脚本#!/bin/sh/bin/mount -t sysfs sysfs /sys/bin/mount -t proc proc /proc/bin/mount -t ext3 /dev/hda6 /mntexec /sbin/run-init /mnt /sbin/init(4)用cpio命令构建initramfs,然后在QEMU环境下进行试验。如果不出意外,试验系统可以正确地从initramfs切换到真实的linux系统上。
上一篇:精通initramfs构建step by step (十):uclibc
下一篇:精通initramfs构建step by step (十二):大结局 - 测试一下
登录 注册