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

步骤一:准备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.csdn.net/junht/article/details/7814719

http://blog.csdn.net/junht/article/details/7814757

http://blog.csdn.net/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、        通过测试程序验证移植是否成功

猜你喜欢

转载自blog.csdn.net/wangyezi19930928/article/details/52955973