基于tar包制作启动光盘的步骤

本文详细介绍了如何基于tar包制作BIOS平台可启动的光盘,包括准备isolinux.bin、编译内核、制作根文件系统、配置isolinux.cfg,以及制作ISO镜像的步骤。在编译内核时,需根据需求选择体系结构,如x86,并使用busybox创建rootfs根文件系统。最后,通过iso.sh脚本生成启动光盘的ISO镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

步骤一:准备isolinux.bin 和工作目录

在准备制作 ISO的目录里添加一个子目录,比如 isolinux/ ,然后放入isolinux.cfg 和一个对所有光盘都一样的 isolinux 提供的引导介质isolinux.bin,当然还要放入相应的 kernel, initrd 等等,目录结构如下:

 

|---isolinux

 | |---isolinux.bin

 | |---isolinux.cfg

|---image

| |---linux.tgz(定制系统的tar包)

|---kernel(bzImage) (内核文件)

|---initrd(ramdisk) (虚拟文件系统)

|---readme

 

步骤二:编译内核、制作根文件系统、配置 isolinux.cfg

a)、编译内核(bzImag

Kernel为需要引导的操作系统内核,此处选择Linux内核,内核的获取可以通过编译适当的Linux内核版本得到内核可以根据自己的需要进行适当的裁剪。记住,在编译的时候根据需要选择体系结构(x86、arm等),如果您不知道怎么选择CPU体系结构,可以参考下面的写法:

# makeARCH=x86 menuconfig

 编译完成后在arch/x86/boot中会生成内核镜像bzImage。将其拷贝到boot中,当然您也可以专门建立相关的文件夹来存放内核和文件系统,区别只是在配置isolinux.cfg时的路径问题。

 

b)、制作ramdisk(根文件系统)

除了内核镜像外,还需要文件系统。这里采用busybox制作文件系统生成rootfs根文件系统,然后将rootfs根文件系统制作成ramdisk镜像文件ramdisk.img。关于ramdisk文件的制作方法如下:

运行目录里面的ramdisk.sh就可以完成根文件系统的制作。

 

c)、修改配置文件(isolinux.cfg

isolinux目录下的文件主要有

|---isolinux

 | |---isolinux.bin

 | |---isolinux.cfg

 | |---vesamenu.c32

| |---… …

 

引导程序isolinux.bin:它的作用是读取isolinux.cfg,根据配置选项,决定引导的内核文件。

配置文件isolinux.cfg:它的格式如下:

label linux

  kernel vmlinuz

  append initrd=initrd26.gz ramdisk_size=1000000 vga=791

关于cfg文件中相关配置选项的意义请自行查找。

步骤三:制作 BIOS 平台可启动光盘

制作 BIOS 平台可启动光盘的命令
 # mkisofs -o output.iso -b isolinux/isolinux.bin -c  isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .

 

制作 iso 的时候要使用 -b 参数,用来指定 isolinux.bin 所在的路径,-c 参数的那个文件是自动生成的,不用太担心,其余参数都是固定的。这里的路径都是相对于光盘的根的,而和制作光盘时的工作目录没有关系。

为了制作方便,运行本文目录里的iso.sh就可以制作相应的镜像文件。

 

步骤总结:

首先,BIOS完成第一阶段的引导,虚拟机从光驱启动,isolinux会加载内核镜像到虚拟机内存中,然后加载文件系统(ramdisk)到内存中,将执行权限交给Linux内核,内核启动然后加载文件系统。

至此,就可以利用虚拟机验证自己修改的内核和根文件了。

 

参考文档:

http://blog.youkuaiyun.com/junht/article/details/7814719

http://blog.youkuaiyun.com/junht/article/details/7814757

http://blog.youkuaiyun.com/junht/article/details/7814757

http://www.ibm.com/developerworks/cn/linux/l-cn-biosefi-boot/index.html

续:

项目需要内核支持gtk和ncurses功能,下面讲述库移植过程。

大家都知道,函数库分为静态库和动态库两种。

静态库:

1、        扩展名.a

2、        这类函数在编译的时候就会直接整合到执行程序当中,利用静态库编译生成的文件会比较大。但是编译成功的可执行文件可以独立执行、不需要向外部要求读取函数库内容。

动态库:

1、        扩展名.so

2、        动态库在编译的时候程序里面只有一个指向位置,当可执行文件运行时,程序才会读取函数库使用。

重点来了,这里我们使用的是动态库方式,移植过程如下:

1、        下载gtk和ncurses源码包

2、        编译源码包,编译过程中需要使用  --prefix 参数将安装包重新指定目录。

$ ./configure  --prefix=/opt/gtk

 

3、        将生成目录下的文件逐个打包,然后再解压到rootfs相应目录下(保留软连接,防止问价过大)


4、      重新制作ramdisk.img 和 iso文件 

5、        安装iso文件

6、        通过测试程序验证移植是否成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值