如何制作可引导的定制的Linux系统iso文件

如何制作可引导的定制的Linux系统iso文件

前言:

对于搞Linux系统的人来说,Linux本身就像是一个灵魂,把它烧写到硬件上,原本死寂的硬件就能跑起来,这时候的你想来是有些小激动。不过对于不同的硬件,我们需要对Linux系统作相应的裁剪,也就是通常所说的系统定制了。

今天,我想写这样一篇文章。于我本人,可以当作笔记,到时不记得了可以有参考;于大家,可以当作学习教材,自己尝试做一篇加深对Linux系统的认识。本人所使用的编译环境为:Linux ubuntu 4.15.0-36-generic,如果大家使用的是其他环境,我这里没办法保证会和我的结果完全一致,另外在实际的编译当中,可能因为没有安装相对应的deb导致编译不成功,这个时候需要网上搜索一下具体的原因,将对应的deb安装上直到编译成功,所以这两点是需要注意的。好了费话不多说,进入正题。

Linux内核编译:

之前我在专栏

的第一篇有讲过怎么去编译Linux内核, 不过讲的不全面,也没有讲到定制的问题,今天我要写的更加全面。

首先,我们需要去 Linux官网下载一个稳定的内核版本,比方我自己下载的是linux-4.14.78. tar.xz,大家可以使用wget命令直接下载,然后解压,分别执行命令

xz -d linux-4.14.78.tar.xz
tar xvf linux-4.14.78.tar

这样就解压出了linux内核源码,如图所示。

进入linux-4.14.78,执行make menuconfig命令,来配置编译选项,比方我这里将USB/IP配置成编译进内核,这样这个模块就直接在编译启动时就加载了。

经过一两个小时之后, 我们可以将Linux内核编译完成,并找到bzImage文件。

这个bzImage文件正是我们需要制作可引导的iso文件的一个组件。

因为,我们最终希望把编译好的Linux制作成iso文件,所以这里还需要讲解如何制作rootfs和如何将initrd.img,bzImage和grub等文件制作成为可引导的iso文件。


使用busybox来制作rootfs:

  1. 下载 busybox,比方我这里下载的是busybox-1.29.0.tar.bz2
  2. 解压并编译

编译busybox和编译内核有几分相似,先执行make menuconfig,如图:

  • 配置

选择Busybox Settings—>Build Options—>,选择[] Build Busybox as a static binary(no shared libs) ,按Y选中 ESC退出

成功编译后提示:

  LINK    busybox_unstripped
Static linking against glibc, can't use --gc-sections
Trying libraries: crypt m
 Library crypt is not needed, excluding it
 Library m is needed, can't exclude it (yet)
Final link with: m
  DOC     busybox.pod
  DOC     BusyBox.txt
  DOC     busybox.1
  DOC     BusyBox.html

注意这里的Static linking against glibc, can't use --gc-sections并不是错误。运行file命令查看busybox的属性。

执行make install安装busybox,在当前目录下可以看到有一个_install的目录产生,我们可以查看这个目录,其实就是各种Linux的命令行工具和一些配置文件的集合。

到这一步,我们可以说已经完成了rootfs的一半工作,接下来我们在/home/user/Linux_zhih u/目录建一个viz的目录,当然这个名字可以自己命名成其它的,并执行以下脚本:

#!/bin/sh
echo "------Create rootfs directons......"
mkdir rootfs
cd rootfs
echo "--------Create root,dev......"
mkdir root dev etc bin sbin mnt sys proc lib home tmp var usr
mkdir usr/sbin usr/bin usr/lib usr/modules
mkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.d
mkdir lib/modules
chmod 1777 tmp
cd ..
echo "-------make direction done---------"

并将busybox的_install目录下的文件都拷贝到这个新建的rootfs中,这样一个rootfs的框架就建立起来了。

  • 创建设备文件

进入dev目录中执行以下两个命令来创建console和null两个字符设备

mknod -m 660 console c 5 1
mknod -m 660 null c 1 3

进入etc目录,编辑fstab,输入以下内容

proc    /proc   proc    defaults    0   0
none    /tmp    ramfs   defaults    0   0
mdev    /dev    ramfs   defaults    0   0
sysfs   /sys    sysfs   defaults    0   0

在etc下创建init.d目录,并在init.d目录下编辑rcS文件且加上可执行权限,输入以下内容

#! /bin/sh

/bin/mount -a

在etc下编辑inittab,输入以下内容

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff –a

在etc下编辑group文件,输入以下内容

root:*:0:
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
tty:*:5:
disk:*:6:
lp:*:7:lp
mail:*:8:
news:*:9:
uucp:*:10:
proxy:*:13:
kmem:*:15:
dialout:*:20:
fax:*:21:
voice:*:22:
cdrom:*:24:
floppy:*:25:
tape:*:26:
sudo:*:27:

在etc下编辑profile文件,输入以下内容

# /etc/profile: system-wide .profile file for the Bourne shells

echo
echo "Mini2440 FileSystem is Ready ..."
echo

USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATH
HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH

到此rootfs的制作就完成了,我们还需要将它制作成initrd.gz的根文件系统镜像文件,执行以下命令

ln -sv bin/busybox init

这个命令很重要,不然会有错误产生。

执行以下命令来产生initrd.gz的根文件系统压缩文件

find . | cpio -H newc -o | gzip -9 -n >/home/user/initrd.gz


到此, 我们有了两个重要的文件:bzImage和initrd.gz,有这两个文件我们就可以来制作iso文件了。


我们在viz目录下,创建一个iso的目录,并将bzImage和initrd.gz两个文件拷贝到该目录下。

现在我们还需要引导用的grub文件。

  1. 依次创建目录liveCD,liveCD/ttylinux,liveCD/boot及liveCD/boot/grub目录。
  2. 复制grub可引导的iso文件所需的引导程序
cp -rv /usr/share/grub/default/* boot/grub

3. 将bzImage和initrd.gz放到ttylinux目录下

4. 在boot/grub/目录下编辑grub.conf文件

default 0
timeout 10
title   ttylinux for testing (make by xujiwei, xujiweigo@163.com)
root (cd)
kernel  /ttylinux/bzImage load_ramdisk=1 prompt_ramdisk=0
ramdisk_size=8192 ro root=/dev/ram0
initrd  /ttylinux/initrd.gz

5. 执行以下命令来产生iso文件

mkisofs -R -b ttylinux/bzImage -no-emul-boot -boot-load-size 4 -boot-info-table -o ttylinux.iso liveCD

执行成功后会看到如下信息

I: -input-charset not specified, using utf-8 (detected in locale settings)
Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 1287
Total directory bytes: 6144
Path table size(bytes): 50
Max brk space used 24000
4992 extents written (9 MB)

查看产生的ttylinux.iso文件

至此,我们已经做好了一个可引导的,定制的(加入了usb/ip模块),基于linux系统的iso文件,这个文件直接可以运行在vmware中。

资讯网关于专注的高端网站建设草根seo技术博客专业的平面设计网站有哪些东北50岁熟妇露脸在线胡雪岩电视剧公司起名 气势梦见蛇皮是什么预兆周公解梦浙江卫视节目表旅游推广营销方案宇晨这个起名的寓意rere珠宝是什么品牌铁甲无敌奖门人沉睡谷周六交易了股票温兆伦主演的电视剧大全算命先生给自己算命吗公司广告扇设计网站白山seo达德教育网安起名男童郭一男孩起名ie1032位普安网站建设价格稷起名君字艺术签名百元之恋电影天堂深圳网站建设团队商旅服务公司起名服装起名大全易经起名商标注册少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

资讯网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化