linux 启动的具体步骤是什么?

benjiam 2003-08-11 08:50:08
我指的是最具体的步骤

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

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

(比如先 init 然后 rc.d ) 我们只是在不同的位置添置自己的script 而已?
...全文
44 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
benjiam 2003-08-19
  • 打赏
  • 举报
回复
我的意思 是对linux 的启动和内核做一部分的修改
让他成为我的os。



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

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧