手动制作linux
1、 先添加一块磁盘
2、 创建磁盘分区,并格式化为ext4格式
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个目录
4、cd到我们新创建的磁盘里,然后创建几个系统所需的目录
5、为系统提供grub文件
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下载
8、接下来,我们就开始真正编译属于自己的linux吧,准备好开发linux的包,www.kernel.org下载,我这里的的版本是linux3.13.6
9、执行make menuconfig 进入如下界面就可以进行编译了
选定好自己所需要的选,直接编译进内核。
10、复制编译好的文件到你创建的新磁盘中boot目录下
11、大功告成,接下就让我们启动一下看看吧
磁盘正在初始化
成功进入系统
执行ls命令成功
到此编译成功!!!
转载于:https://blog.51cto.com/19930523/1543853