导航:首页 > 操作系统 > linuxbootsect

linuxbootsect

发布时间:2022-12-22 06:03:41

❶ 0.11版的linux内核中bootsect.s用的是什么汇编

这是以前比较古老的一种汇编编译器....
Begdata begbss这些都是一些标记,名字可以随便改,标志着代码段的起始位置....

❷ linux0.11 bootsect.s代码里有shl cx,#9。这不是非法指令吗

应该是计算2^9

❸ 在linux下无法备份bootsect.rh怎么解决

你需要用Root帐户(密码即是管理员密码)进行登录才能取得权限进行此操作

不是安装完成后设置的帐户,在安装过程中会有一步提示你“输入根密码”,记得吗,这个“根密码”就是这个“根帐户”——Root帐户的密码,根帐户拥有最高的“超级管理员”权限,可是进行一切系统设置的操作

❹ LINUX安装程序的引导方式

安装程序有从预编译好的包(*.deb/*.rpm)安装,deb包用dpkg命令安装,rpm包用rpm命令安装,命令详细用法自己看man页(man dpkg & man rpm),还有一种方法很烦,从源代码编译后安装,首先你得有编译环境和这个软件所需要的所有函数库文件,这个太多了,自己看看/lib目录里有多少东西就知道了,编译过程一般是先用tar解压缩源代码包,然后执行里面的./configure或者./install脚本,然后,如果你执行的是./configure脚本还需要用make生成目标代码,再用make install安装到你的系统;安装软件就说完了,什么?要使用windows下的软件?建议你在windows下安装好,再来linux里用wine执行,wine本身是个虚拟机,知道了吧?有点慢,兼容性也不好……,双系统对xp没影响,但是你不要装vista,因为据说vista会使用MBR,这样linux的引导管理器grub的stage1就没处放了,启动windows的方法很简单啊,在/boot/grub/menu.lst里添加如下几行:
title Windows XP #title 后面的东西随便你写,只是显示给你看的
rootnoverify (hd0,0) #指定系统引导分区(就是Windows安装所在分区)
chainloader +1 #链式引导加载,windows都是这样的,按顺序读,读一个字节加1
hd0,0这儿式假设你windows安装在第一个IDE通道上的主盘上的第一个分区,这个数字可能随着你删除分区会变,前一个数字0是规定第一个IDE通道上的主盘,后一个数字0表示第一个分区,如果你不确定是第几个分区,在grub里面试好了,反正启动时有个按e进入编辑状态的选项

❺ 为什么linux0.11的bootsect.s中为什么设置硬盘有效位AA55

aa55是硬件规定。。。

❻ Linux的bootsect.s 程序放在哪里

........这个东西只存在内核源代码里啊。教你个方法,使用搜索来查找文件位置。
find 目录 -name bootsect.s
请把上面的目录替换成你要开始查找源代码的路径所在目录

❼ Linux系统开机时启动内核步骤是什么

实模式,并开始执行位于地址0xFFFF0处
的代码,也就是ROM-BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位
于地址0的中断向量表。最后BIOS将启动盘的第一个扇区装入到0x7C00,并开始执行此处
的代码。这就是对内核初始化过程的一个最简单的描述。
最初,linux核心的最开始部分是用8086汇编语言编写的。当开始运行时,核心将自
己装入到绝对地址0x90000,再将其后的2k字节装入到地址0x90200处,最后将核心的其余
部分装入到0x10000。
当系统装入时,会显示Loading...信息。装入完成后,控制转向另一个实模式下的汇
编语言代码boot/Setup.S。Setup部分首先设置一些系统的硬件设备,然后将核心从
0x10000处移至0x1000处。这时系统转入保护模式,开始执行位于0x1000处的代码。
接下来是内核的解压缩。0x1000处的代码来自于文件Boot/head.S,它用来初始化寄
存器和调用decompress_kernel( )程序。decompress_kernel( )程序由Boot/inflate.c,
Boot/unzip.c和Boot../misc.c组成。解压缩后的数据被装入到了0x100000处,这也是
linux不能在内存小于2M的环境下运行的主要原因。
解压后的代码在0x1010000处开始执行,紧接着所有的32位的设置都将完成: IDT、
GDT和LDT将被装入,处理器初始化完毕,设置好内存页面,最终调用start_kernel过程。
这大概是整个内核中最为复杂的部分。
[系统开始运行]
linux kernel 最早的C代码从汇编标记startup_32开始执行
startup_32:
start_kernel
lock_kernel
trap_init
init_IRQ
sched_init
softirq_init
time_init
console_init
#ifdef CONFIG_MODULES
init_moles
#endif
kmem_cache_init
sti
calibrate_delay
mem_init
kmem_cache_sizes_init
pgtable_cache_init
fork_init
proc_caches_init
vfs_caches_init
buffer_init
page_cache_init
signals_init
#ifdef CONFIG_PROC_FS
proc_root_init
#endif
#if defined(CONFIG_SYSVIPC)
ipc_init
#endif
check_bugs
smp_init
rest_init
kernel_thread
unlock_kernel
cpu_idle
・startup_32 [arch/i386/kernel/head.S]
・start_kernel [init/main.c]
・lock_kernel [include/asm/smplock.h]
・trap_init [arch/i386/kernel/traps.c]
・init_IRQ [arch/i386/kernel/i8259.c]
・sched_init [kernel/sched.c]
・softirq_init [kernel/softirq.c]
・time_init [arch/i386/kernel/time.c]
・console_init [drivers/char/tty_io.c]
・init_moles [kernel/mole.c]
・kmem_cache_init [mm/slab.c]
・sti [include/asm/system.h]
・calibrate_delay [init/main.c]
・mem_init [arch/i386/mm/init.c]
・kmem_cache_sizes_init [mm/slab.c]
・pgtable_cache_init [arch/i386/mm/init.c]
・fork_init [kernel/fork.c]
・proc_caches_init
・vfs_caches_init [fs/dcache.c]
・buffer_init [fs/buffer.c]
・page_cache_init [mm/filemap.c]
・signals_init [kernel/signal.c]
・proc_root_init [fs/proc/root.c]
・ipc_init [ipc/util.c]
・check_bugs [include/asm/bugs.h]
・smp_init [init/main.c]
・rest_init
・kernel_thread [arch/i386/kernel/process.c]
・unlock_kernel [include/asm/smplock.h]
・cpu_idle [arch/i386/kernel/process.c]
start_kernel( )程序用于初始化系统内核的各个部分,包括:
*设置内存边界,调用paging_init( )初始化内存页面。
*初始化陷阱,中断通道和调度。
*对命令行进行语法分析。
*初始化设备驱动程序和磁盘缓冲区。
*校对延迟循环。
最后的function'rest_init' 作了以下工作:
・开辟内核线程'init'
・调用unlock_kernel
・建立内核运行的cpu_idle环, 如果没有调度,就一直死循环
实际上start_kernel永远不能终止.它会无穷地循环执行cpu_idle.
最后,系统核心转向move_to_user_mode( ),以便创建初始化进程(init)。此后,进程0开始进入无限循环。
初始化进程开始执行/etc/init、/bin/init 或/sbin /init中的一个之后,系统内核就不再对程序进行直接控制了。之后系统内核的作用主要是给进程提供系统调用,以及提供异步中断事件的处理。多任务机制已经建立起来,并开始处理多个用户的登录和fork( )创建的进程。
[init]
init是第一个进程,或者说内核线程
init
lock_kernel
do_basic_setup
mtrr_init
sysctl_init
pci_init
sock_init
start_context_thread
do_init_calls
(*call())-> kswapd_init
prepare_namespace
free_initmem
unlock_kernel
execve
[目录]
--------------------------------------------------------------------------------
启动步骤
系统引导:
涉及的文件
./arch/$ARCH/boot/bootsect.s
./arch/$ARCH/boot/setup.s
bootsect.S
这个程序是linux kernel的第一个程序,包括了linux自己的bootstrap程序,
但是在说明这个程序前,必须先说明一般IBM PC开机时的动作(此处的开机是指
"打开PC的电源"):
一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定
在ROM BIOS中,ROM BIOS一般是在FEOOOh到FFFFFh中),而此处的内容则是一个
jump指令,jump到另一个位于ROM BIOS中的位置,开始执行一系列的动作,包
括了检查RAM,keyboard,显示器,软硬磁盘等等,这些动作是由系统测试代码
(system test code)来执行的,随着制作BIOS厂商的不同而会有些许差异,但都
是大同小异,读者可自行观察自家机器开机时,萤幕上所显示的检查讯息。
紧接着系统测试码之后,控制权会转移给ROM中的启动程序
(ROM bootstrap routine),这个程序会将磁盘上的第零轨第零扇区读入
内存中(这就是一般所谓的boot sector,如果你曾接触过电脑病
毒,就大概听过它的大名),至于被读到内存的哪里呢? --绝对
位置07C0:0000(即07C00h处),这是IBM系列PC的特性。而位在linux开机
磁盘的boot sector上的正是linux的bootsect程序,也就是说,bootsect是
第一个被读入内存中并执行的程序。现在,我们可以开始来
看看到底bootsect做了什么。
第一步
首先,bootsect将它"自己"从被ROM BIOS载入的绝对地址0x7C00处搬到
0x90000处,然后利用一个jmpi(jump indirectly)的指令,跳到新位置的
jmpi的下一行去执行,
第二步
接着,将其他segment registers包括DS,ES,SS都指向0x9000这个位置,
与CS看齐。另外将SP及DX指向一任意位移地址( offset ),这个地址等一下
会用来存放磁盘参数表(disk para- meter table )
第三步
接着利用BIOS中断服务int 13h的第0号功能,重置磁盘控制器,使得刚才
的设定发挥功能。
第四步
完成重置磁盘控制器之后,bootsect就从磁盘上读入紧邻着bootsect的setup
程序,也就是setup.S,此读入动作是利用BIOS中断服务int 13h的第2号功能。
setup的image将会读入至程序所指定的内存绝对地址0x90200处,也就是在内存
中紧邻着bootsect 所在的位置。待setup的image读入内存后,利用BIOS中断服
务int 13h的第8号功能读取目前磁盘的参数。
第五步
再来,就要读入真正linux的kernel了,也就是你可以在linux的根目录下看
到的"vmlinuz" 。在读入前,将会先呼叫BIOS中断服务int 10h 的第3号功能,
读取游标位置,之后再呼叫BIOS 中断服务int 10h的第13h号功能,在萤幕上输
出字串"Loading",这个字串在boot linux时都会首先被看到,相信大家应该觉
得很眼熟吧。
第六步
接下来做的事是检查root device,之后就仿照一开始的方法,利用indirect
jump 跳至刚刚已读入的setup部份
第七步
setup.S完成在实模式下版本检查,并将硬盘,鼠标,内存参数写入到 INITSEG
中,并负责进入保护模式。
第八步
操作系统的初始化。

❽ 我读linux bootsect.S 文件好多不明白

这些只是定义一些常量,在会汇编代码中会用到这些常量,
这些大多是根体系有关的量,通常固定不变
比如:boot_flag是操作系统第一个扇区的最后两个字节的内容

❾ 在早期的Linux中,开机时,为什么不能直接将bootsect直接引导到0X90000处,却要先引导到0X7c00

我记得0X7c00是boot引导的入口
但是协议规定
kernel boot setctor应该被放在90000-92000之间
所以BootSect会将自己移动到那去

❿ linux内核中bootsect 关闭软驱电动机的程序,看不懂

  1. 汇编是在x86平台i386的汇编,用的语法比较老用的as86汇编器,ld86连接器,这种语法类似intel汇编,但是linux0.11里就开头用了这个,后面用的都是at&t汇编,后面的版本也全部用at&t替换了

  2. loading system,,,上面下面都有13 10 ascii是回车换行 加起来24个字符

  3. .org 508 是告诉汇编器分配内存地址时放在508字节位置, 后面+.word=510 然后加上末尾的0xaa55的mbr标记刚好凑齐512字节 组成一个可被bios识别的引导程序

阅读全文

与linuxbootsect相关的资料

热点内容
能否给隐藏相册加密 浏览:596
糖心app改什么名 浏览:823
战地1控服务器如何部署 浏览:394
xp还原系统输入命令 浏览:323
mysql命令行版本 浏览:303
如何进入itunes找文件夹 浏览:832
CAD中重复命令使用 浏览:477
心智pdf 浏览:475
网站电台直播间源码 浏览:852
文件夹14c和18c的区别 浏览:34
android隐式调用 浏览:667
plc的编程指令边沿继电器 浏览:723
voc文件夹 浏览:865
租广东联通服务器注意什么云空间 浏览:934
javascript高级程序设计pdf 浏览:292
pwm单片机原理 浏览:348
ai算法在线修复图片 浏览:982
scratch编程中如何做射击游戏 浏览:479
at89c51编程器 浏览:344
项目经理叫醒程序员 浏览:344