x86架构芯片启动过程分析

1、上电启动顺序

在这里插入图片描述

上电自检
读取ROM里的bios程序
bios程序会进行硬件检测,比如:内存、硬盘、显卡等
bios完成自检后,需要选择引导设备。比如设备上有U盘、SSD、eMMC、机械硬盘,bios需要知道从哪个启动介质去启动计算机
bios操作界面是有默认的启动顺序,也可以在bios阶段手动修改启动顺序
确定好启动介质后,bios会去启动介质读取MBR分区表或者gpt分区表
在引导分区中存放了启动配置文件grub.cfg
grub.cfg文件里会指明内核放在哪个分区、根文件系统位置等
解析grub.cfg文件,启动内核、挂载根文件系统
备注:截图来自《史上最牛的Linux视频教程—兄弟连》

2、MBR和GPT分区

MBR分区:
(1)MBR(MasterBootRecord)是主引导记录的缩写,引导扇区是每个每个分区的第一个扇区,而主引导扇区是硬盘的第一个扇区;
(2)MBR分区最多支持4个主分区或者三个主分区+一个扩展分区,最多只能识别2TB的空间;
GPT分区:
(1)GPT是GUID磁碟分割表(GUID Partition Table)的缩写,中文含义“全局唯一标识磁盘分区表”,每个分区表有唯一的一串标识符来表示;
(2)GPT可以识别超过2T的空间,理论上可以有无数多个分区,但是实际上会有限制,在Windows中gpt最多支持128个主分区;
总结:GPT的出现晚于MBR,GPT分区方案比MBR更先进,目前推荐使用GPT分区方案;
.

3、把存储介质制作成启动盘

3.1、场景介绍

(1)有重装过电脑Windows系统经历的博友应该知道,重装过程就是制作一个启动U盘,从U盘启动然后去烧录硬盘;
(2)启动U盘里是一个完整的系统,在启动后能识别硬盘并且能把系统烧录到硬盘里,经过烧录后,硬盘里也有一个完整的系统,只需要修改启动顺序,这样电脑每次都从硬盘启动,这时候就不需要U盘了;
(3)下面介绍的脚本,就是启动U盘里用于烧录系统到硬盘/SSD的过程;

3.2、制作启动盘的脚本

#清楚掉ssd的分区信息
dd if=/dev/zero of=/dev/nvme0n1 bs=1M count=1 
sectors_of_ssd=`cat /sys/block/nvme0n1/size`
dd if=/dev/zero of=/dev/nvme0n1 seek=$((${sectors_of_ssd}-32)) bs=512 count=32 > /dev/null 2>&1
sync

建立gpt格式分区表
parted /dev/nvme0n1 --script mklabel gpt		

#建立新的主分区,partion_start是分区起始地址,partion_end是分区结束地址
parted /dev/nvme0n1 --script mkpart primary ${partion_start} ${partion_end} 	

#设置第一个分区为引导分区
# set的格式:set number flag state
#如果你想从某个分区引导,那么你应该将这个分区的boot标记设置为on
parted /dev/nvme0n1 --script set 1 boot on    

#打印分区表
parted /dev/nvme0n1 --script print 

#格式化第一个分区为vfat格式,并设置卷名为ESP分区
mkfs.vfat -n 'ESP' /dev/nvme0n1p1

#格式化除第一分区之外的其他分区为ext4格式或者其他的文件系统格式
mke2fs -t ext4 -F -b 4096 -L "分区的标签名" /dev/nvme0n1p2 > /dev/null 2>&1

#挂载第一个启动分区,拷贝启动文件,比如:grub.cfg
mount -t vfat /dev/nvme0n1p1 /mnt/boot 
mkdir -p /mnt/boot/efi/boot
cp /system_files/efi/grub.cfg /mnt/boot/efi/boot/

# 拷贝内核、文件系统到指定分区
······

3、grub.cfg

set default=0	#默认从哪个菜单项启动
set fallback=3	#如果默认菜单项启动失败,那么就启动第几个菜单项(从'0'开始计数)
set gfxmode=1280x1024,auto	# 设置gfxterm使用的分辨率
set lang=en_US	#设置GRUB2的界面语言,简体中文应设为'zh_CN'
set timeout=3	#在启动时有3秒时间来选择从哪个菜单项启动

#菜单项0,作为正常启动模式
menuentry " device (Normal Mode)" {
        search --set -l boot_partition	# 查找标签是boot_partition的分区,该分区作为根分区
        linux /bzImage fbconsole=disable console=ttyS0,115200	# 内核镜像是根分区的bzImage,启动参数是fbconsole=disable console=ttyS0,115200
        initrd /root_image.gz	# 根文件系统是根分区的root_image.gz文件,文件系统类型是initrd
}

#菜单项1,作为异常情况下的启动模式,一般是Normal模式启动失败的情况下采用,用于恢复系统
menuentry " device (Rescue Mode)" {
        search --set -l rescue_partition	# 查找标签是rescue_partition的分区,该分区作为根分区
        linux /bzImage Rescue=1 fbconsole=enable # 内核镜像是根分区的bzImage,启动参数是Rescue=1 fbconsole=enable
        initrd /root_image.gz	# 根文件系统是根分区的root_image.gz文件,文件系统类型是initrd
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Linux 系统可以通过两种方式移植到Mac M1芯片:第一种是通过苹果官方提供的Rosetta 2技术,可以让普通x86架构的应用程序在M1芯片上运行;第二种是通过苹果官方提供的Universal 2技术,可以让Linux操作系统的容器在M1芯片上运行。 ### 回答2: 要将Linux系统移植到Mac M1芯片上,需要经过以下步骤: 首先,由于Mac M1芯片和传统的x86架构有很大差异,需要进行架构转换。Mac M1芯片采用的是ARM架构,而Linux系统一般是针对x86架构优化的。因此,需要进行ARM架构的适配工作。这涉及到对内核、驱动程序和应用程序进行修改和重新编译。 其次,需要将Mac M1芯片上的硬件抽象层和设备驱动程序与Linux内核进行匹配。由于Mac M1芯片的硬件配置和其他ARM架构设备可能有所不同,因此需要对内核进行相应的修改。 然后,需要对Linux系统的引导程序和启动流程进行调整。Mac M1芯片采用Apple Silicon SoC架构,它具有自己的引导过程和启动流程。因此,在Linux系统移植到Mac M1芯片上时,需要进行相应的调整,以确保能够正确引导和启动。 最后,需要对应用程序进行重新编译和适配。由于Mac M1芯片x86架构具有不同的指令集和硬件特性,因此在将Linux应用程序移植到Mac M1芯片上时,可能需要进行一些修改和重新编译,以确保其能够在新的硬件环境中正常运行。 总之,将Linux系统移植到Mac M1芯片上需要进行架构转换、设备驱动匹配、引导程序和启动调整以及应用程序适配等一系列工作。这需要对Linux系统有深入的了解,以及熟悉Mac M1芯片的架构和特性。完成这些工作后,就可以在Mac M1芯片上运行Linux系统了。 ### 回答3: Linux系统如何移植到Mac M1芯片主要涉及到以下几个方面: 首先,需要针对Mac M1芯片及其架构进行适配。由于Mac M1芯片基于ARM架构开发,而传统的Linux系统主要基于x86架构,所以需要对内核进行相应的修改和适配。这包括调整指令集、更改内存管理、重新编译驱动程序等。 其次,需要调整验证和安全机制以适应Mac M1的安全芯片(Secure Enclave)。Mac M1芯片内置了一块安全芯片,用于加密、认证和保护敏感数据等操作。因此,在移植Linux系统时,需要确保将安全芯片的功能与Linux系统进行整合,并确保数据的安全性。 第三,需要与Mac M1的硬件进行兼容性测试和调试。由于Mac M1使用了不同的硬件平台和设备,因此需要确保Linux系统与Mac M1的硬件能够正常通信和协作。这可能需要对驱动程序进行修改和优化,以确保各种硬件设备的正常工作。 最后,需要针对Mac M1的优化和性能调整。由于Mac M1芯片采用了先进的ARM架构,相比传统的x86架构,可以提供更高的性能和效能。因此,在移植Linux系统时,可以对内核和应用程序进行相应的优化,以充分发挥Mac M1芯片的潜力。 综上所述,将Linux系统移植到Mac M1芯片涉及到对内核、安全芯片、硬件和性能的调整和适配。这需要开发人员具备深厚的系统知识和技术,以确保移植的成功和稳定运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值