首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux源码学习笔记 day1 开机时如何加载系统?

今天开始学习 闪客老师的《Linux源码趣读》 在开机的时候,主板上的 BIOS程序 会把硬盘启动区的512个字节复制到内存里的0x7c00的位置,再跳转到这里运行。...开机后初始化 指向BIOS CPU中的PC寄存器,存储着即将要执行的指令的内存地址。开机时需要初始化PC寄存器的值为0xFFFF0。这是Intel手册龟腚的,硬件厂商只是实现而已。...放到第一扇区 Linux-0.11 从bootsect.s开始, 经过编译后,bootsect.s 会被编译成二进制文件,放在启动区的第一扇区。...加载到内存 前面说了BIOS会把代码复制到0x7c00的位置,具体怎么复制的还是得看bootsect.s里的代码: .equ BOOTSEG, 0x07c0 # original address of...这里32位 64位都是 加载到 0x7c00处,这里CPU还处于16位的实模式下,还得兼容老祖宗的位置。看来CPU的发展也有历史包袱。

95731
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第十五章 系统服务管理

    15.3.2 Linux开机顺序 从点开计算机的电源开始,Linux的开机顺序与windows的前几步都类似,只是后面加载内核之后各自步骤不同了。...{}中的insmod 指定加载进来的支持的文件系统类型,如: insmod ntfs ---即支持windows的文件系统 setroot='hd0,msdos1' ---是定本项的操作系统,所在的磁盘和分区...,即hd0,msdos1 grub>ls (hd0,msdos1)/ ---查看指定分区内的文件,以确定msdos1 就是/boot/分区,可见原/boot/下的各文件 grub>...insmod/grub2/i386-pc/linux.mod --- 加载linux的grub2模块 grub>setroot=(hd0,msdos1) --- 指定/boot/所在的分区...操作思路: 按Linux的启动顺序,在加载完内核后,会读取/etc/fstab挂载各文件系统,则/etc/passwd和/etc/shadow便可读取并做验证了,我们需要做的是,在Linux加载完内核后

    1.8K51

    Linux开机流程(中)

    在装LINUX操作系统时,其中有一个步骤就是询问你MBR装在哪里的,但这个MBR并非一定真的是MBR,可能是MBR,也可能是VBR,还可能是EBR,并且想要单磁盘多系统共存,则MBR一定不能被覆盖(此处不考虑...它们的关系如下图: 这张图解释了开机过程中grub2阶段的所有过程,boot.img段的boot loader只有一个作用,就是跳转到core.img对应的boot loader的第一个扇区,对于从硬盘启动的系统来说...但直到目前为止,core.img都还不识别/boot所在分区的文件系统,所以kernel.img初始化grub环境的过程就包括了加载模块,严格地说不是加载,因为在安装grub时,文件系统类的模块已经嵌入到了...unrestricted { search --no-floppy --fs-uuid --set=root f5d8939c-4a04-4f47-a1bc-1b8cbabc4d32 linux16...当控制权交给了stage2,stage2就能加载grub的配置文件/boot/grub/grub.conf并显示菜单并初始化grub的运行时环境,当选中操作系统后,stage2将和kernel.img一样加载操作系统内核

    3.7K31

    Linux开机启动(bootstrap)

    计算机开机是一个神秘的过程。我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面。...然而,计算机开机又是个异常脆弱的过程,我们满心期望的登录界面可能并不会出现,而是一个命令行或者错误信息。了解计算机开机过程有助于我们修复开机可能出现的问题。...引导加载程序储存有操作系统(OS)的相关信息,比如操作系统名称,操作系统内核 (内核)所在位置等。常用的引导加载程序有GRUB和LILO。 随后,引导加载程序会帮助我们加载内核(kernel)。...实际上,我们可以在多个分区安装引导加载程序,每个引导加载程序对应不同的操作系统,在读取MBR的时候选择我们想要启动的引导加载程序。这就是多操作系统的原理。...小结:BIOS -> MBR -> 引导加载程序 -> 内核 内核 如果我们加载的是Linux内核,Linux内核开始工作。

    8.3K80

    win 7和Ubuntu 12.04 双系统下的磁盘分区问题

    电脑开机后都要来读取这个扇区,这是启动电脑所必须的。  ...MBR是用来加载引导程序的,并不是用来加载操作系统的。当你开机时,BIOS内置的检测程序(已经固化)会进行开机自检并在MBR中(MASTER的MBR)中加载开机引导程序。...(这也就不难理解为什么MBR总是在0号磁道,如果MBR老是变更位置,那我岂不是要修改BIOS程序),MBR中的开机引导程序将在你选择操作系统之后将在你安装操作系统的那个主分区将操作系统的某些核心文件加载到内存并创建相应的进程...第二个menu是win 7启动的引导加载(可以看到前面的图有加 * 号表示bootloader),这个引导程序安装在第二个分区(保留分区)/dev/sda2的引导块 (hd0,1),即(hd0,msdos2...如果没有独立出来,则为set root='(hd0,msdos9)'    #如前面,根目录/  为/dev/sda9 完整的路径为 (hd0,msdos9)/boot/vmlinuz-...

    2.4K50

    linux开机启动顺序

    LINUX 开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程。分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径。...一般的开机启动无非就是四步:BIOS加电自检(检测硬件什么之类的,寻找启动磁盘,在启动磁盘加载MBR);Boot Loader(加载grub.conf顺序启动) ;启动内核(内核会尝试挂载根文件系统,根文件系统至少包含...启动第四步--加载内核   根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。...只要其中有一个程序加载获得成功,那么系统就将开始用户层的初始化,而不会再回到init()函数段中。至 此,init()函数结束,Linux内核的引导 部分也到此结束。...3: 接上一步,主机读取boot loader后,会读取里面的信息,知道谁跟谁是待在哪,假如主机想进入linux系统,读取到linux核心是在/boot文件目录中后,将此核心加载到内存中。

    8.3K100

    Linux开机启动(bootstrap)

    作者:Vamei 来源:见文末 计算机开机是一个神秘的过程。我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面。...然而,计算机开机又是个异常脆弱的过程,我们满心期望的登录界面可能并不会出现,而是一个命令行或者错误信息。了解计算机开机过程有助于我们修复开机可能出现的问题。...MBR会告诉电脑从该设备的某一个分区(partition)来装载引导加载程序(boot loader)。...实际上,我们可以在多个分区安装boot loader,每个引导加载程序对应不同的操作系统,在读取MBR的时候选择我们想要启动的引导加载程序。这就是多操作系统的原理。...小结:BIOS -> MBR -> 引导加载程序 -> 内核 内核 如果我们加载的是Linux内核,Linux内核开始工作。

    6.5K50

    linux开机流程(上)

    一.简介 计算机启动分为内核加载前、加载时和加载后3个大阶段,这3个大阶段又可以分为很多小阶段,本文将非常细化分析每一个重要的小阶段。...内核加载前的阶段和操作系统无关,Linux或Windows在这部分的顺序是一样的。...由于使用anaconda安装Linux时,默认的图形界面是不支持GPT分区的,即使是目前最新的CentOS 7.3也仍然不支持,所以在本文中主要介绍传统BIOS平台(MBR方式)的启动方式(其实是本人愚笨...在内核加载时和加载后阶段,由于CentOS 7采用的是systemd,和CentOS 5或CentOS 6的sysV风格的init大不相同,所以本文也只介绍sysV风格的init。...bios是按下开机键后第一个运行的程序,它会读取CMOS中的信息,以了解部分硬件的信息,比如硬件自检(post)、硬件上的时间、硬盘大小和型号等。

    4.5K20

    打造前端 Deepin Linux 工作环境——开机自动加载 ~.bash_profile 文件

    打造前端 Deepin Linux 工作环境——开机自动加载 ~/.bash_profile 文件 这个事情非常搞笑,当我把系统根据我的配置搞好之后,我就关机重启了一下。...这说明我们配置的 ~/.bash_profile 文件没有加载,只需要重新执行一下 . ~/.bash_profile 就可以了。但是如果每次启动都要这样运行一次,我感觉还是蛮扯淡的。...我的第一反应是,这应该是 deepin linux 的一个 BUG。本着没有能力开发也要大力配合开发的态度,我去官方提交了一个关于这个问题的用户反馈。 然后我想,肯定不会是我一个人遇到这个问题。...我用的 mac os 也好 arch linux 都是这样设置,而从来没有人给我说过这样不行,到你这,怎么这么多理由呢? 另外,.bashrc 文件是每次打开一个新的终端窗口的时候执行的。

    1.4K60

    Linux开机流程(下)

    到目前为止,内核已经被加载到内存掌握了控制权,且收到了boot loader最后传递的内核启动参数以及init ramdisk的路径。...要加载/sbin/init程序,首先要找到根分区,根分区是有文件系统的,所以内核需要先识别文件系统并加载文件系统的驱动,但文件系统的驱动又是放在根分区的,这就出现了先有鸡还是先有蛋的矛盾。...解决方法之二则像传统grub借助中间过渡引导段stage1_5一样,将根文件系统的驱动模块放入一个中间过渡文件,在加载根文件系统之前先加载这个过渡文件,再由过渡文件跳转到根文件系统。...操作系统初始化涉及了不少过程,大致如下:读取运行级别;初始化系统类的环境;根据运行级别初始化用户类的环境;执行rc.local文件完成用户自定义开机要执行的命令;加载终端; 运行级别 在sysV风格的系统下...在Linux系统中定义了7个运行级别,使用0-6的数字表示。

    2.8K20

    Linux开机自动挂载磁盘

    我们当然可以手动再次将其挂载,但如果每次重启都需要这样手动操作会很不方便;因此我们可以利用自动挂载,这样系统每次开机的时候就可以自动将磁盘挂载上去了。自动挂载可以有两种方式。...第3列是所要挂载设备的文件系统或者文件系统类型 第4列是挂载选项,通常使用defaults就可以 第5列设置是否使用dump备份,置0为不备份,置1,2为备份,但2的备份重要性比1小 第6列设置是否开机的时候使用...本文需将逻辑卷lv_study挂载到 /lvm_study ,文件系统为ext4 格式,不进行dump备份以及开机磁盘检查。...挂载点必须为已经存在的目录 (3)卸载时必须保证当前磁盘没有发生读写操作 2.修改/etc/rc.d/rc.local文件 将mount命令添加进rc.local文件是另一种实现开机自动挂载的方式

    9.9K40

    linux设置开机自启动

    linux设置开机自启动执行命令: 执行命令: 编辑"/etc/rc.local",添加你想开机运行的命令 运行程序脚本:然后在文件最后一行添加要执行程序的全路径。...例如,每次开机时要执行一个hello.sh,这个脚本放在/usr下面,那就可以在"/etc/rc.local"中加一行"/usr/./hello.sh",或者" cd /opt && ..../hello.sh " 注意,你的命令应该添加在:exit 0 之前 image.png 在/etc/init.d目录下添加自启动脚本 linux在“/etc/rc.d/init.d”下有很多的文件...,每个文件都是可以看到内容的,其实都是一些shell脚本或者可执行二进制文件 Linux开机的时候,会加载运行/etc/init.d目录下的程序,因此我们可以把想要自动运行的脚本放到这个目录下即可。...在下次开机启动的时候,proxy.py就会以root用户身份被自动运行。

    17.8K40
    领券