ITKeyword,专注技术干货聚合推荐

注册 | 登录

制作u盘启动linux系统

caochenxian 分享于 2016-05-17

推荐:U盘启动Ghost安装Windows操作系统

转自:http://blog.163.com/wang_ly2442/blog/static/949434072013977472549/ 用U盘做一个启动盘,里面有一个Windows PE系统,用这个PE系统里的虚拟光驱和Ghost

2019阿里云双11返场狂欢继续,
地址https://www.aliyun.com/1111/2019/home

制作u盘启动linux系统 本文记录我制作u盘驱动的过程,按照这篇教程,你可以得到一个装有linux3.10.10操作系统的u盘,可以启动x86架构的主板,文件系统使用busybox制作。 制作u盘启动linux系统 所需工具 第一步为u盘分区 第二步为u盘安装grub 第三步编译kernel 第四步制作文件系统 第五步启动吧u盘君 所需工具 高质量u盘一个,容量大于4G linux3.10.10内核源码 busybox1.24.1源码 装有ubuntu系统pc一台 注意: u盘不能使用那种扩容的劣质u盘,因为可能找不到u盘的mbr; 内核源码下载地址https://www.kernel.org/; busybox源码下载https://busybox.net/ 第一步、为u盘分区 宿主机可以使用ubuntu也可以是装有vmware的win7,有一个linux运行环境即可,因为要使用linux命令fdisk为u盘分区;fdisk的使用方法这里不做讲解,只讲制作过程,一步一步跟着做保证能成功 。 在ubuntu中使用fdisk -l找到我们的u盘,例如根据大小判定我们的u盘为/dev/sdb 使用fdisk /dev/sdb进入fdisk界面,m打印帮助信息 使用o命令清除分区信息,使用n命令为u盘分两个区,200M+4G+剩余空间,200M用于boot分区,4G用于交换分区,剩余空间自己使用;(其实有一个分区就可以了,因为我们的u盘启动后,直接就可以拔掉了,kernel是运行在内存中的) 使用a命令设置1分区为活动分区 使用t命令设置2分区为82交换分区(没有就可以不用设置) 使用w命令保存并退出 有了分区了,但是分区里还没有文件系统,也就不能使用,我们使用mkfs.ext3 /dev/sdb1将我们的boot分区格式化,也可以使用mkfs.ntfs /dev/sdb3将其余空间格式化为win7可识别分区 第二步、为u盘安装grub 下面为u盘安装grub,其实就是在u盘前512字节写入我们想要的mbr,电脑启动后经过bios引导,识别到u盘为第一启动盘后,读取u盘前512字节,这512字节记录了u盘分区信息;这样就知道了活动分区,然后根据活动分区中装有的grub和grub配置信息找到kernel和iinitrd 涉及到的grub命令有grub-install和grub-update 按抓给你步骤 将u盘boot分区挂在到一个目录,例如我的:mount /dev/sdb1 /mnt/rootfs grub-install –root-directory=/mnt/rootfs /dev/sdb 添加grub.cfg文件,该文件就是开机选择启动项的配置文件 路径在u盘boot分区的/boot/grub/grub.cfg,下面是我的grub.cfg menuentry ‘Name of the kernel,u can edit by yourself’ –class ubuntu –class gnu-linux –class gnu { insmod gzio insmod ext2 search –no-floppy –fs-uuid –set=root b6e9a297-4675-4d9b-9295-3c8c27fdf12a linux /vmlinux initrd /initrd } search 开头行的root后面空格接你boot分区的uuid vmlinux文件是你boot目录里将要放的kernel initrd文件是boot目录将要放的linux系统文件 uuid查看方法是使用blkid命令,谁用谁知道。。。。 至此,你可以将u盘插入电脑,设置bios的u盘为第一启动,然后F10,如果没有错误的话将看到你grub.cfg中的menuentry中的命令了,但是回车后还不能进入,因为。。。还没有拷贝kernel啊! 第三步、编译kernel 将下载好的kernel解压,使用tar -xvf ./linux-3.10.10.tar;然后进入到kernel目录cd linux-3.10.10,下面开始编译 使用menuconfig进行配置,至于怎么配置,这里就不讲了,不然三天三夜也说不完,建议参考金步国先生的博客,http://www.jinbuguo.com/ 配置完,使用make命令生成bzimage镜像 make modules编译模块 make modules_install命令安装模块到/lib/modules/ 至此在linux-3.10.10的/arch/x86/boot/bzImage 文件是存在的 然后将bzImage拷贝到u盘的boot分区,并改名字为vmlinux 第四步、制作文件

推荐:在Linux下制作U盘系统安装盘

1.选择一个性能稍好的U 盘,要不会制作过程会很慢。请备份U盘中的资料, 因为制作系统安装盘会格式化U盘; 2.查看U盘挂载点:

fdisk

-l

3.卸载U盘:

umount

系统 解压busybox源码,cd到解压后的目录中,使用make menuconfig配置,至于配置选项,采用默认即可,需要知道与注意的选项是busybox生成的文件系统有静态链接方式和动态链接方式,所谓静态库就是在bin目录下的busybox程序不需要库文件,因为库文件已经静态编译到程序中了;动态链接方式不能直接运行/bin目录下busybox程序,因为busybox需要动态库支持,这就需要将busybox所需的库文件和链接文件copy到lib目录。为了简单期间可以采用静态链接方式。这样在busybox源码根目录下make后,在当前目录会生成一个_INSTALL目录,直接将该目录下的内容复制出来即可。 我们制作的u盘启动项可以在kernel运行起来后拔掉u盘,这是因为我们采用intrd的内存加载方式运行kernel,那么怎么制作initrd呢? 在你的电脑上创建一个目录用来制作initrd文件系统,mkdir homeDir 将busybox生成的_INSTALL目录下的所有内容拷贝到homeDIr目录 在homeDir目录中的etc目录下创建inittab文件,文件内容: ::sysinit:/etc/init.d/rcS tty1::respawn:getty 38400 tty1 tty2::respawn:getty 38400 tty2 ::ctrlaltdel:reboot ::shutdown:/etc/init.d/shutdown.sh 在homeDir/etc/init.d/目录下创建rcS文件,文件内容为创建所需目录,创建dev目录节点,mount虚拟文件系统等。 在homeDir目录下创建一个脚本,用来生成initrd文件,文件内容: shell #!/bin/sh rootDir=/u盘boot分区 rm -rf $rootDir/initrd find .|cpio -o -H newc |gzip -9 > $rootDir/initrd echo “binggo!!” 将生成initrd文件拷贝到u盘的boot分区根目录下 这里需要注意的知识点如下: 弄清楚三个文件之间的调用关系,initrc/inittab/rcS。kernel启动后在kernel_start中调用init等函数,函数会执行boot分区根目录下的initrc,initrc会调用/etc/inittab,然后inittab执行/etc/init.d/rcS,至此进入了命令行终端,系统就起来了。其实还有其他很多细节需要处理,例如需要在rcS中设置网络ip,设置登录帐号密码,设置用户名,设置自动磁盘挂载,设置驱动动态加载等等。 弄清楚busybox的udev和mdev区别,以及两个命令与hotplug的机制;简单说就是当有热插拔时间成生时,kernel发送事件的给hotplug注册的函数,如果使用udev的话,udev会根据接受到的事件和自己的配置信息执行特定的同做,例如在dev目录下创建节点,执行驱动程序的动态加载等操作。具体信息建议自行百度. fstab文件和mount -a/umount -a命令的使用 passwd和shadow文件的作用以及使用如下命令 [root@b2 ~]# openssl passwd -1 -salt $(< /dev/urandom tr -dc ‘[:alnum:]’ | head -c 32) 第五步、启动吧!u盘君 至此,我们已经完成了u盘启动制作,保证u盘boot分区下的vmlinx和 initrd正确,boot分区的uuid设置正确,然后找到boot分区下vmliux和initrd就可以正常启动了。下面把我在制作过程中遇到的困难和问题和大家分享下,希望能给大家抛砖引玉,也许能在制作过程中会遇到不一样的问题,但是要知道能力是在解决困难的过程中成长的。 安装完grub后,设置u盘为第一启动项,发现死活都看不到u盘的启动项选择界面。 解决办法:第一保证u盘设置boot分区为活动分区;第二保证boot分区下boot/grub/grub.cfg配置文件正确 从u盘启动项选择界面选择自己的kernel,能看到kernel起来了,但是不能进入终端,显示找不到init文件 解决办法:问题原因主要有busybox位64版本,kernel是32位版本,kernel在执行用户空间第一个busybox的init命令失败,导致不能打开控制台终端。这时应该自行百度安装32位运行库,使用gcc32从新编译busybox。 希望能把我自己的kernel_config/busybox_config/inittab/rcS文件和大家共享,后续会添加的,如果大家有共享的好办法希望及时通知我哦!!

推荐:用U盘安装操作系统

用WinSetupFromUSB工具把操作系统文件导入到U盘里,把bios改为U盘启动即可进入安装画面,复制完文件后电脑重启,这时候会提示hal.dll文件找不到,这并不是缺少文

制作u盘启动linux系统 本文记录我制作u盘驱动的过程,按照这篇教程,你可以得到一个装有linux3.10.10操作系统的u盘,可以启动x86架构的主板,文件系统使用busybox制作。 制作u盘启动linux系统

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。