收录日期:2019/01/17 21:40:11 时间:2016/05/20 18:28:25 标签:应用程序开发区
我指的是最具体的步骤

BIOS 以后
然后 lilo 把内核调入内存

我想知道 后面的启动过程 是否是由内核固定了启动位置

(比如先 init 然后 rc.d ) 我们只是在不同的位置添置自己的script 而已?
a.首先,x86 CPU加电,初始化自己进入16位实模式,然后跳转到0xFFFF0,BIOS地址,调用显卡Bios初始化显卡,进行自检,然后装载可引导设备的第一个扇区到0x7c00,然后跳转到那儿。这部分代码其实是arch\i386\boot\bootsect.S。新的内核已经不支持从bootsect启动,bootsect.S其实只是提示用户按任何键重启。因为现在的可引导设备的第一个扇区是lilo或grub,然后由他们装载lilo或grub引导代码进入0x90000,然后装载内核setup代码进入0x90200,然后装载内核剩余部分进入0x10000。

b.内核setup代码就是arch\i386\boot\setup.S,它读取硬盘参数, 检查签名0xAA55.0x5A5A, 检查是否大内核(检查标志),使用不同的方法获取内存大小,初始化设置键盘硬件。检查显卡及其参数,然后调用。video.S中的video函数。

c.video 检查内核参数,vga= 让用户选择视频模式,然后返回Setup.S。

d.然后将内核从0x10000移动到0x1000这部分代码的开始就是arch\i386
\boot\compressed\head.S。然后进入32位保护模式。然后跳转到head.S 中startup_32=0x1000。注意:以上全是汇编代码。

e.然后head.S调用arch\i386\boot\compressed\misc.c中的decompress_kernel函数(C语言代码),然后调用lib\inflate.c中的gunzip函数,将内核解压缩到0x100000(32位指针)。然后显示”Uncompressing Linux...”。最后返回head.S

f.然后进入arch\i386\kernel\head.S。(汇编语言)在这里初始化内存页表(PT),初始化(IDT)中断描述表。检查CPU类型,配置对称多处理器。接着调用start_kernel在init\main.c中这个函数永不返回。致此,开始启动内核,之后的代码都变成了C语言代码。start_kernel中才是真正的linux内核初始化,启动过程。

g.然后内核调用init函数,这个函数查找并调用
/sbin/init
/etc/init
/bin/init
直到一个成功,init命令会根据/etc/inittab中设定的运行等级决定调用的rc(/etc/inittab中列出)。
如果都不成功启动
/bin/sh

thank u so good!
不过好复杂! 我想问 利用linux 源代码
我如何修改和制作一个属于我自己的启动os呢
Ropyn(剑心) ( ) 说的已经够详细了,如果你想看更详细的描述,一个方法是看源代码,另一个方法是参考下面两本书的相关内容:
1。Understanding The Linux Kernel, 2nd Edition:Appendix A - System Startup,条理解释的很清楚,不愧是老外写的Bible级的读物
2。《Linux内核2.4版源代码分析大全》第五章-Linux系统初始化,里边给的代码比较多,参考着看一下吧,不过这本书比较难懂。
>>后面的启动过程 是否是由内核固定了启动位置
顺序是固定的,不会改变,不过rc.d里边的东西都是有优先级的,比如说K50netdump,50就是优先级。
晕,你所谓的“属于我自己的启动os”是何概念?
至少启动这个os 显示出来的信息和redhat 这类os 的启动不一样
不是loading..... 
我想出现属于自己的信息
只是显示信息不一样,就是你的意义上的“你的”操作系统?崩溃……
我感觉你对OS没有一个正确的认识! OS总是与需求相对的,有什么样的需求,就有什么样的操作系统。比如说DOS是一个单任务,实模式下的操作系统,而Unix,Linux是多任务,保护模式下的支持虚拟机制的操作系统。如果只满足“启动”这一条件,那岂不是很简单?在硬盘的引导扇区的代码上加上显示“MyOS”的机器码不就是了?但是真正的意义上的现代操作系统,要有以下一些条件:Process management,Memory management,Filesystems,Device control,Networking,所以说OS是一个很复杂的概念,不是你说的能启动起来的就是操作系统。要是真的那么简单,谁都可以做操作系统了……
没有对操作系统理论的了解和对Linux内核整体的把握,想修改Linux为你所用是不太可能的。
建议楼主最好看看有关操作系统的教材还有Linux源代码分析的一些教材。
我的意思 是对linux 的启动和内核做一部分的修改
让他成为我的os。



问一下各位,急~~ java在桌面根本没用,3D网游没一个是用JAVA做的~~~~~~~~~ 谁有java servlet API?最好是中文的!! 各位兄弟,请指点一下怎样用位来进行权限存取、判断操作?急! New Char() {\"a\", \"b\"},与 New [Char]() {\"a\", \"b\"}有什么区别? 我用DevExpress.XtraReports生成一个报表,里面含有图像,转成Excel文档后,为什么看不见图像呢? 问三个问题,请大家帮忙! 请教关于java.awt.Color的HSB和RGB模型的转换 mysql_select_db 函数在失败的情况下,其默认的数据库还是原来的吗? 市面上有没有专门用于录音的类似于MP3之类的东西卖? C# MainMenu 问题 u盘的问题 请问怎么将里面的%B4%F3%B3%A4%BD%F1%D6%F7%CC%E2%C7%FA转换为相应的汉字 MFC创建一个DIALOG窗口,如何显示状态栏? 请问高手,我的鼠标不支持拖动操作,是硬件问题还是软件问题?如何解决? 救命,被局域网内的害虫搞得烦死了! 能知道这个家伙是用的什么软件害人吗? 散200分!不知道大家是否记得我? 急!关天DBGrid的访问?? 弱问一个问题:C++编写链表怎么开始的? 一个关于图片自动缩放的问题 c++ primer的课后题 代码注释写作者名称,还是写代号? JAVA有哪些考证的啊.... 如何定义无符号长整行变量? JBUILDER问题请教大家,在线急等 Windows 程序设计难学吗? 关于postgresql在linux下的安装问题 eclipse 的编译问题 关于图片上传问题..请高手指一二...