手动制作linux

1、  先添加一块磁盘

wKioL1P4g5GwaoVQAA2WKFzwTNw263.bmp

2、  创建磁盘分区,并格式化为ext4格式

wKioL1P4g-LB5nQkAAxFgK1TOic225.bmp

wKiom1P4gtmwJui8AAltfNXrzzQ379.bmp

3在宿主机上挂在boot分区和根分区,额这里忘记截图了。不过聪明的你肯定懂的

[root@localhost ~]# mkdir/mnt/{boot,sysroot} –p

[root@localhost mnt]# mount /dev/sdb1/mnt/boot/ 
[root@localhost mnt]# mount /dev/sdb2 /mnt/sysroot/

下面会将宿主系统的内核,程序等需要的文件移植到这2个目录


4cd到我们新创建的磁盘里,然后创建几个系统所需的目录

wKioL1P4hNeAUafFAAkqUEwqXno746.bmp

5、为系统提供grub文件

wKiom1P4g-_imJzHAAxmcFqi01Y779.bmp

6在根目录下移植系统必须的一些基本的程序

除了主程序,还要移植相应的库文件,init所依赖的库文件可以使用ldd命令来查看

[root@localhost sysroot]# ldd /sbin/init 
    linux-gate.so.1 =>  (0x00ca5000) 
    libnih.so.1 => /lib/libnih.so.1 (0x00514000) 
    libnih-dbus.so.1 => /lib/libnih-dbus.so.1(0x00a1e000) 
    libdbus-1.so.3 => /lib/libdbus-1.so.3 (0x006a9000) 
    libpthread.so.0 => /lib/libpthread.so.0 (0x00d92000) 
    librt.so.1 => /lib/librt.so.1 (0x0020e000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x005e1000) 
    libc.so.6 => /lib/libc.so.6 (0x00217000) 
    /lib/ld-linux.so.2 (0x0080c000)

查询到所需的库文件后,将这些库文件移植到对应的目录。

[root@localhost sysroot]# cp /lib/libnih.so.1/lib/libnih-dbus.so.1 /lib/libdbus-1.so.3 /lib/libpthread.so.0 /lib/librt.so.1/lib/libgcc_s.so.1 /lib/libc.so.6 /mnt/sysroot/lib/

 

用同样的方法再移植bash

[root@localhost sysroot]# cp /bin/bash/mnt/sysroot/bin/

[root@localhost bin]# ln -s bash sh #不要忘了为bash创建链接文件

[root@localhost sysroot]# ldd /bin/bash 
    linux-gate.so.1 =>  (0x004c4000) 
    libtinfo.so.5 => /lib/libtinfo.so.5 (0x00e05000) 
    libdl.so.2 => /lib/libdl.so.2 (0x00c1d000) 
    libc.so.6 => /lib/libc.so.6 (0x00110000) 
    /lib/ld-linux.so.2 (0x00954000)

[root@localhost sysroot]# cp/lib/libtinfo.so.5 /lib/libdl.so.2 /lib/ld-linux.so.2 /mnt/sysroot/lib/

/lib/libc.so.6这个库文件是init和bash都需要使用到的,之前移植init时已经cp过去了,这次就不用重复cp了

其它需要用到的程序都可以使用这种方法进行移植,这里只提供了最基本的bash,其它程序可以按照自己的需要进行移植

这里我再移植了一个ls命令,步骤这里就不再罗列出了,等制作好后登录到这个微型linux后,出了bash内置的命令外,我将只能在bash下使用ls命令

 

之前移植了init后,还没有创建init的配置文件,接下来就先创建init配置文件inittab

[root@localhost bin]# vim/mnt/sysroot/etc/inittab

写入下面2行

id:3:initdefault: 
si::sysinit:/etc/rc.d/rc.sysinit

表示默认启动的运行级别为3,和系统开机时初始化脚本的位置

创建系统初始化脚本

[root@localhost bin]# vim/mnt/sysroot/etc/rc.d/rc.sysinit

#!/bin/bash 

echo -e "\t hello world ,welcome to the mini linux by lustlost" 
/bin/bash

 

[root@localhost bin]# chmod +x/mnt/sysroot/etc/rc.d/rc.sysinit #不要忘了给脚本加上执行权限

 

7、接下来我们就可以编译内核了,

注意:准备好开发环境,我这个的环境是局域网下载,各位小伙伴们请自行google下载

wKioL1P4hUvS74IqAA79-GqjDHg345.bmp

8、接下来,我们就开始真正编译属于自己的linux吧,准备好开发linux的包,www.kernel.org下载,我这里的的版本是linux3.13.6

wKioL1P4hY7DIXtLABEP5CdfUkQ794.bmp

9、执行make menuconfig 进入如下界面就可以进行编译了

wKiom1P4hLSzdsc9AAyZ2KoIa9Q518.bmp

选定好自己所需要的选,直接编译进内核。

10、复制编译好的文件到你创建的新磁盘中boot目录下

wKioL1P4heGCaFlUAAHvCAXv8wk567.bmp

11、大功告成,接下就让我们启动一下看看吧

wKiom1P4hO7wqTxwAAf5eJq99To622.bmp

磁盘正在初始化

wKioL1P4hiWytrzKAAn1tC2DsME690.bmp

成功进入系统

wKioL1P4hjiyM3MGAAGgOJZO6EQ468.bmp

执行ls命令成功

到此编译成功!!!