当前位置:  技术问答>linux和unix

linux asm 启动 bios 等很多概念性的问题请教

    来源: 互联网  发布时间:2015-04-05

    本文导语:  我们知道pc 在启动的时候 是转到0000:7c00 H的进行启动的 dos 下调入io.sys 模块的 linux 的话 应该是运行lilo (我猜的!) 那么一开始的那段asm 代码(启动 )是在一个裸机的情况下直接运行的 它没有得到任何操作...

我们知道pc 在启动的时候
是转到0000:7c00 H的进行启动的

dos 下调入io.sys 模块的
linux 的话 应该是运行lilo (我猜的!)
那么一开始的那段asm 代码(启动 )是在一个裸机的情况下直接运行的
它没有得到任何操作系统的支持吧 !

我想请问一下 是否能在裸机的情况下 利用c编程呢? 因为代码完全用汇编编写的 好像太复杂了! 我的想法是在asm 代码 运行以后 直接调入一个由c 语言编写的程序 完成我需要做的事情。按照我的想法 这个时候os 都还没有,所以不知道是否可行?  这个c 代码似乎应该不能调用操作系统的支持 而是全部由bios 支持? 不知道说得对不对 

|
a.其实,linux现在就是你说的这样做的:(我以linux.2.5.70为例)

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

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

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

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

f.然后head.S调用archi386bootcompressedmisc.c中的decompress_kernel函数(C语言代码),然后调用libinflate.c中的gunzip函数,将内核解压缩到0x100000(32位指针)。然后显示”Uncompressing Linux...”。最后返回head.S

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

上面我们可以看出除了bootsector,Setup代码必须用汇编之外 (因为这些代码要严格限制代码段大小,对齐边界),其它的部分都可以使用C语言,但入口函数一定要设置入口点地址,而且编译成静态库。

    
 
 

您可能感兴趣的文章:

  • 关于linux下管道的概念性问题
  • 关于Linux多进程与socket概念性问题与解决方案
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 向linux达人请教linux下5.1声道测试工具
  • 请教一下,如果想在linux下开发java,选哪个版本的linux好一点
  • 小弟想请教,如果现在不像装linux了怎样把linux的分区改回ntfs格式的?
  • 请教:linux启动盘和一张盘的linux有何区别?
  • 请教linux高手,在Linux
  • 在linux下面怎么安程序啊?我刚裝了一个 linux,下了一个迅雷安装程序,可是不知道怎么安装啊?真心请教。
  • 初次接触linux,关于linux 用户权限问题请教!
  • 请教linux 下的adsl拨号问题.
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊 iis7站长之家
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 各位大狭!小弟初学Linux,请各位列举学Linux的网站,留下QQ,Email以向各位请教!!!多谢了!!!
  • 菜鸟请教Linux
  • 高手看过来:请教如何在移动硬盘上安装Linux?
  • 请教:如何在Linux下获得EDID信息
  • 请教风河 linux内核 如何配置使之支持xwindows?
  • 请教大家一下,linux运维方面的书应该读什么?
  • 请教:如何直接使用RedHat Linux 9的ISO文件安装Linux?
  • 我的linux装不上啊???请教高手
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • LINUX下有没有线程概念,和WIN下线程概念有什么不同,谢谢.
  • 请问unix/linux下Cb编程中,是否有工程的概念。
  • 在Linux里有没有DLL这个概念?
  • windows下编程中有没有linux编程中管道和信号的概念?
  • Linux的线程库pthread是否有"亲缘性"的概念?
  • linux2.4到2.6,信号的概念有哪些变化?
  • Linux下有类似于windows服务的概念?
  • linux概念问题
  • 新手,问linux有windows的 WaitforSingleObject的概念吗
  • linux有对应windows中的注册表概念吗?
  • 学习linux下编程时,一些概念问题,请帮助解释,谢谢
  • Linux下的执行文件是什么概念,是象Dos里的2进制机器码吗,怎么看一个文件是不是执行文件.
  • linux 共享内存操作概念问题————————————————(跪请指教)
  • Linux下有没有磁盘整理的概念?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3