DIY Linux ——某江大学某电学院某入式课程的大作业NO. 1

主要参考网站

click here

主要不同

和参考网站的几个不同点

  • 我没有用centOS的虚拟机,用的是Ubuntu 系统的实体机 (非虚拟机?) 。一些命令不一样,比如yum & sudo apt-get install 之类。更要当心自己的操作,不要把系统给删了。 果然,我差点要重装系统。遇到问题不要急着重装系统,鱼死网破,也不要绝望,畏惧不前 ,建议喝杯奶茶,估计问题就不见了。要积极解决问题,比如疯狂google.
  • U盘是mini SD 卡插在usb读卡器里面,虽然我也不知道这造成啥子的后果。

具体步骤

步骤一

步骤一应该是安装一个Ubuntu 16.04系统,但是我现在不想写教程,等我改天要重装系统了,我回整理一个,让后把链接放上来。

有一点一定要说!
用UltralSO的时候,按下那个“写入”的按钮前,一定要看清写入到哪个盘里面!!!!
选择U盘a,格式化之后,软件选中的可能是U盘b!!!!
要重新选中a再写入!!!
我当时不小心写入了我的移动硬盘,导致几百G的视频资源和学习资料都没了 T _ T

还有一点想说
开机的时候,每台笔记本不一样,按某个键(比如F9 F10,具体baidu ),进入boot 设置,选择允许usb开机,才可以装系统,才可以完成我们的大作业。

步骤二

安装一些基本的包,我现在也不知道新系统会缺啥,sigh.
建议遇到error 告诉你缺什么,去装什么

步骤三

根据参考网站上的指示格式化U盘:

fdisk /dev/sdb

左边红色圈圈里的东西和我运行出来的有点不一样,但是没啥问题,本质上就是整个U盘一个分区。
参考网站上的是柱面(cylinder),右边的终端里的是扇区(Sector),这也许就是SD卡导致。

在这里插入图片描述

trouble shooting

  1. 使用这种方法格式化前可能需要將U盘卸载,就是相当WINDOWS下的弹出,不然是没法格式化的。

  2. 做任何的事情遇到权限不够的问题,在命令前加上 sudo 试试,其他的代码Ubuntu 和 CentOS 差不多的。

步骤四

编译linux 4.20.12 内核,由于Ubuntu 和 CentOS 的一些包不一样,参考网站上的一些包不能按照他的下载。应该包的名字不一样。
g++, wget 这些基本的是一样的。
建议直接编译,根据报错安装对应的包。
这个网站解决了编译内核的时候的配置问题 click here
编译的时候建议加上-j1,意思是用单核编译,有的时候,电脑回默认四核编译,然后卡死爆炸,慢一点就慢一点吧。(博主还是任性用了四核)

make bzImage -j1

步骤五

编译busybox,这个东西给了我们的Linux系统一些基本的文件夹,

txt@txt-HP:~/myLinux/rootfs$ l
bin/  etc/   linuxrc@  prroc/      sbin/  tmp/  var/
dev/  init@  mnt/      rootfs.img  sys/   usr/

这玩意有点肯,我的系统要改它的源代码!
这个网站说得挺清楚的: click here
其他的东西就跟着参考网站做没有遇到问题,除了老生常谈的加上sudo权限。

步骤六

安装grub
这玩意的作用是,在原来空的文件夹里面形成 boot/grub 文件夹
文件夹里面有许多二进制文件,用于开机时告诉电脑要干什么,具体我没有看懂。。。

grub-install --root-directory=/root/udisk /dev/sdb

注意这些参数不能乱打,网上有许多自己系统的grub坏了,怎么换一个,我当时就是不小心重装了自己ubuntu的grub,差点绝望重装。上课的时候,自己操作了半天,最后windows 都上不了了, 因为没电了
遇到问题还是找博客为上策。

步骤七

最后把做好的bzImage和rootfs.img.gz复制到udisk的boot目录下

cp /home/txt/Desktop/bzImage udisk/boot
 cp /home/txt/Desktop/rootfs.img.gz udisk/boot

然后编译一份grub.conf 配置文件 (或者叫做 grub.cfgmenu.lst ,具体也许由电脑上的grub 版本决定):

gedit udisk/boot/grub/grub.conf

输入

title udisk_linux
root (hd0,0)
kernel /boot/bzImage rw root=/dev/ram
initrd /boot/rootfs.img.gz

在install 完成之后,会有一个device.map
里面记录了 sda sdb 分别对应 hd0 hd1,但是,对应到了grub.conf里不一样了!!!

可以在grub shell 里面使用uuid 命令查看应该叫自己的u盘叫什么。click here

这份文件会在选择U盘启动之后自动去加载,如果名字取错,不是三个中特定的一个,或者任意取名,比如叫它 FileName.txt, 都可以在grub shell 里面使用:

configurefile /boot/grub/FileName.txt

运行文件里面的配置,但是选择U盘启动之后不会自动加载。

代码解读:

  • 指定一个开机选项叫做udisk_linux
title udisk_linux
  • 指定开机对象的根目录
root (hd0,0)
  • 加载根目录下的 /boot/bzImage 内核
kernel /boot/bzImage rw root=/dev/ram
  • 加载initrd临时文件系统
initrd /boot/rootfs.img.gz

关机重启,选择usb启动,看看有没有成功。
如果没有成功,试一试一次输入

kernel /boot/bzImage rw root=/dev/ram
initrd /boot/rootfs.img.gz

能不能加载出系统。这样是直接加载内核以及initrd,grub.conf 没有用.

猜你喜欢

转载自blog.csdn.net/qq_39575818/article/details/87992529
今日推荐