mini Linux制作过程(25/01)
Mini Linux:
启动流程:
参考:https://blog.csdn.net/gatieme/article/details/50914250
https://linux.cn/article-8807-1.html#4_2073
https://www.linuxidc.com/Linux/2015-04/115817.htm
CentOS 6:
POST --> BootSequence(BIOS) --> BootLoader --> Kernel (ramdisk) --> rootfs --> /sbin/init
编写服务脚本
upstart配置文件
/etc/init/*.conf(centos6) /etc/inittab(centos5)
默认运行级别
运行系统初始化脚本:/etc/rc.d/rc.sysinit
/etc/rc.d/rc $runlevel
启动终端,并运行login
启动图形终端
bootloader分类
lilo
grub legacy
grub2
stage1: mbr
stage1_5: filesystem driver
state2:
CentOS 7:
POST --> BootSequence(BIOS) --> BootLoader --> Kernel (ramdisk) --> rootfs --> /sbin/systemd
编写服务脚本
systemd unit文件
# which ls
# which --skip-alias ls //去掉别名
内核编译:
make menuconfig --> .config
make [-j #]
make modules_install
make install
编译步骤:
bootloader: grub
内核:kernel (非模块方式)
根文件系统:busybox
编译示例:
参考:https://www.aliyun.com/jiaocheng/133690.html
https://blog.csdn.net/reblue520/article/details/50786092
yum groupinstall "Development Tools" "Server Platform Development" -y //准备开发环境
# tar xf linux-3.10.67.tar.gz -C /usr/src //准备内核源码并解压
# ln -sv linux-3.10.67 linux
#cd /usr/src/linux
#make help
这步配置内核的方法有多种、每一个make就是一种方法、我们只在选一种就可以了:
make config:遍历选择所要编译的内核特性
make allyesconfig:配置所有可编译的内核特性
make allnoconfig:并不是所有的都不编译,而是能选的都回答为NO、只有必须的都选择为yes。
make menuconfig:这种就是打开一个文件窗口选择菜单,这个命令需要打开的窗口大于80字符的宽度,打开后就可以在里面选择要编译的项了
下面两个是可以用鼠标点选择的、比较方便哦:
make kconfig(KDE桌面环境下,并且安装了qt开发环境)
make gconfig(Gnome桌面环境,并且安装gtk开发环境)
allnoconfig - New config where all options are answered with no
# make allnoconfig //把所有可选择的特性全部关掉
会有一个.configure文件
#less .configure //文件中带m的可编译的选项都去掉了
#lscpu //编译内核前需要查看电脑的cpu和cpi配置信息
#lspci //尤其要注意硬盘接口类型 LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI
#make menuconfig //编译内核
[*] 64-bit kernel //编译为64位内核
[*] Enable loadable module support ---> //支持模块装载
[*] Module unloading //支持模块卸载
Processor type and features --->
Processor family (Generic-x86-64) --->
(X) Generic-x86-64 //选择通用x86-64
[*] Symmetric multi-processing support //支持堆成多处理器
Bus options (PCI etc.) --->
[*] PCI support
Device Drivers ---> //装载硬盘驱动 #lspc可以查看
SCSI device support ---> //加载底层驱动
<*> SCSI device support //编译进内核,不要编译成模块
<*> SCSI disk support /
[*] Fusion MPT device support ---> //硬盘驱动
<*> Fusion MPT ScsiHost drivers for SPI x x
<*> Fusion MPT ScsiHost drivers for FC
<*> Fusion MPT ScsiHost drivers for SAS x x
(128) Maximum number of scatter gather entries (16 - 128) (NEW) x x
<*> Fusion MPT misc device (ioctl) driver
[*] Fusion MPT logging facility
#shutdown -h now
目标磁盘分区
在编译内核之前先添加一块硬盘,把编译的内核放在硬盘里面,
在宿主机上挂一块新磁盘,命名为minilinux,此块磁盘是宿主机上的第二块磁盘,所以这里是/dev/sdb,到时候挂载到目标主机的时候,
因为那里只有这一块磁盘,所以在目标主机上的名称应该是/dev/sda,这个不能搞混了。
首先,我们要在目标磁盘上分两个区,并进行格式化。第一个分区100M,用来装引导程序;第二个分区2G,用来装根文件系统。
然后再进行挂载操作,将/dev/sdb1挂载到/mnt/boot下,将/dev/sdb2挂载到/mnt/sysroot下。
#fdisk /dev/sdb //一般磁盘有3个分区:boot root swap
n --> p --> 1 --> 100M
n --> p --> 2 --> 2G --> w
# mke2fs -t ext4 /dev/sdb1 //格式化文件系统
# mke2fs -t ext4 /dev/sdb2 //因为是新硬盘,所以不用partprobe命令重读分区表
# mkdir /mnt/{boot,sysroot} //建立两个挂载目录
# mount /dev/sdb1 /mnt/boot/
# make -j 4 bzImage //只编译内核文件
安装grub至目标磁盘
一个系统能启动,就需要引导,所以首先要安装一个grub引导程序到我们的新磁盘上。
安装grub引导程序主要有两个命令,一个是grub-install,另一个是setup,这里使用grub-install来安装。
①grub-install会安装grub引导第二阶段的文件②setup不会安装第二阶段的引导程序,是安装引导信息到MBR
注意:--root-directory=后面接的路径应该是boot目录所在的地方,而不是/mnt/boot,因为boot目录在mnt下,目标磁盘是/dev/sdb
# grub-install --root-directory=/mnt /dev/sdb
#mount /dev/sdb2 /mnt/sysroot //挂载根文件系统
#cd /usr/src/linux
# cp arch/x86_64/boot/bzImage /mnt/boot/bzImage
#file /mnt/boot/bzImage
#vim /mnt/boot/grub/grub.conf
default=0
timeout=3
title Mini Linux (3.10.67)
root (hd0,0)
kerbel /bzImage ro root=/dev/sda2
#sync
#sync
新建一个虚拟机,把装有编译的内核文件的磁盘当作启动磁盘,提示没有文件系统
文件系统前面已经有了,只是里面没有文件。这里显示无法挂在,是因为内核无法驱动文件系统,
因为#make menuconfig 编译内核没有 添加文件系统模块,只能驱动sd硬件设备,但无法驱动文件系统。
接下来重新编译内核,驱动文件设备:
File systems --->
<*> Second extended fs support x x
<*> Ext3 journalling file system support x x
<*> The Extended 4 (ext4) filesystem
[ ] Ext4 POSIX Access Control Lists (NEW) //文件访问控制列表,这里没有启用
Executable file formats / Emulations ---> //可执行文件格式
[*] Kernel support for ELF binaries
[*] Write ELF core dumps with partial segments (NEW)
<*> Kernel support for scripts starting with #! //支持shell
# make -j 4 bzImage //再次编译内核文件
#sync //把内存数据同步到磁盘上
#cd /mnt/sysroot
#mkdir -pv etc dev proc sys bin sbin usr/{bin,sbin,lib,lib64} lib64 lib/modules home var/{log,run,lock} tmp mnt media root
#vim bincp.sh
复制程序及其依赖的库文件脚本示例:
#!/bin/bash
#
target=/mnt/sysroot
[ -d $target ] || mkdir /mnt/sysroot
read -p "A command: " command
libcp() {
for lib in $(ldd $1 | grep -o "[^[:space:]]*/lib[^[:space:]]*"); do
libdir=$(dirname $lib)
[ -d $target$libdir ] || mkdir -p $target$libdir
[ -f $target$lib ] || cp $lib $target$lib
done
}
while [ "$command" != 'quit' ]; do
if ! which $command &> /dev/null; then
read -p "No such command, enter again: " command
continue
fi
command=$(which --skip-alias $command)
cmnddir=$(dirname $command)
[ -d $target$cmnddir ] || mkdir -p $target$cmnddir
[ -f $target$command ] || cp $command $target$command
libcp $command
read -p "Another command(quit): " command
done
Mini Linux: kernel+busybox
busybox:
静态方式编译,依赖于glibc-static;
编译单个内核模块:
# cd /usr/src/linux
# make M=drivers/net/ethernet/intel/e1000/
# make M=path/to/somedir/
mini Linux制作过程(25/01)的更多相关文章
- linux基础之Mini Linux制作
一.编译一个简单的linux步骤如下: # yum groupinstall ""Development Tools" "Server Platform Dev ...
- 制作一个64M的U盘启动盘(mini linux + winpe +dos toolbox)
制作一个64M的U盘启动盘(mini linux + winpe +dos toolbox) 自己动手定制winpe+各类dos工具箱U盘启动盘+minilinux 由于一个64M老U盘,没什么用,拿 ...
- [转]制作一个64M的U盘启动盘(mini linux + winpe +dos toolbox)
自己动手定制winpe+各类dos工具箱U盘启动盘+minilinux 由于一个64M老U盘,没什么用,拿来发挥余热.如果U盘够大,可以使用功能更强大的mini linux和带更多工具的winpe.这 ...
- [PCB制作] 1、记录一个简单的电路板的制作过程——四线二项步进电机驱动模块(L6219)
前言 现在,很多人手上都有一两个电子设备,但是却很少有人清楚其中比较关键的部分(PCB电路板)是如何制作出来的.我虽然懂点硬件,但是之前设计的简单系统都是自己在万能板上用导线自己焊接的(如下图左),复 ...
- 嵌入式Linux启动过程中的问题积累
嵌入式Linux启动过程中的问题积累 Dongas 07-12-19 1.Bad Magic Number ## Booting image at 33000000 ... Bad Magic Num ...
- win10 + linux 制作双系统教程(我本身是win10系统)
1.制作启动U盘 准备工作: .linux镜像 .硬盘空余空间>8G,越大越好 .制作启动U盘的软件 .最好3.0U盘一个>4G 下载启动软件的工具(UItraIOS制作的U盘启动盘无法安 ...
- 转-Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
http://blog.chinaunix.net/space.php?uid=10167808&do=blog&id=26042 1)BIOS自检2)启动Grub/Lilo3)加 ...
- Linux 系统启动过程,Linux 系统目录结构
一.Linux 系统启动过程 linux启动时我们会看到许多启动信息. Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导. 运行 init. 系统初始化. 建立 ...
- BabyLinux制作过程详解
转:http://www.360doc.com/content/05/0915/14/1429_12641.shtml BabyLinux制作过程详解 作者:GuCuiwen email:win2li ...
随机推荐
- 划分LUN
划分LUN http://mp.weixin.qq.com/s?__biz=MzAwNzU3NzQ0MA==&mid=209842199&idx=1&sn=7d77fdf7a8 ...
- 版本 ------- 2017年最受开发者欢迎的10个Linux发行版
1.Arch Linux Arch Linux在安装过程中提供了强大的可定制选择,支持你下载和安装自己所需的程序包.虽然这个选择对新手来说没有多大的帮助,但是它确实能够帮助那些使用Arch构建系统和存 ...
- Girls Off-White x Air Jordan 1 from JordansUnveil.com
The Jordans Unveil is a hardwood classic, re-imagined for the modern day sneakerhead. It's a hybrid ...
- liferay总结的通用的工具类
在写增删改查的时候,自己动手写了几个通用的工具类,这几个通用的工具类也是基于API写的 第一个是liferay中的分页.跟我们做普通的web开发,分页是一样的首先需要建立一个分页的实体的类 packa ...
- JSON自动生成相关类
开源项目地址:https://jsonclassgenerator.codeplex.com/SourceControl/latest 太好用了,这个
- JSON语法2
把 JSON 文本转换为 JavaScript 对象 JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 Jav ...
- linux常用命令:chkconfig 命令
chkconfig命令用来安装,查看或修改 services随系统启动的启动选项的设置.是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各 ...
- 功能测试三剑客:测试框架、bug预防、探索性测试
功能测试有一套框架来实现完整的覆盖测试的各个维度 测试框架: 参加本人之前的博客测试框架(包括总体的框架.web测试框架.PC客户端.手机客户端.服务器端.接口测试)六部分,罗列了各个领域的测试覆盖考 ...
- javascript中父、子页面间调用
本文主要转自:http://www.360doc.com/content/11/0525/17/6161903_119333834.shtml http://zh ...
- Linux基础命令---yes
yes 反复的输出指定的字符串,直到手动停止.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 yes [STR ...