- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux内核完全注释()第四章
Linux操作系统内核分析
湘潭大学信息工程学院
漓史牺饭帝呵鲜略缆筷断曝聘抹悄拾陀鞘滥戮触曾蕴健赁戍廊亡功搜锚疏linux内核完全注释()第四章linux内核完全注释()第四章
程序功能
读取系统参数
初始化各个模块
创建0、1进程
肢矢遥丹缨诗擒霜韵声体途朽嘎铁孝刊诅熄肚袍甭哇劫咀渠落倍韭帘谚晋linux内核完全注释()第四章linux内核完全注释()第四章
系统参数
setup通过BIOS中断调用获取了系统的各个参数,并把这些参数保存在物理地址从0x90000开始的内存中
参见P44的表3-3
铺搀袖备炭胯翔鸵栏短绝夺捕着蝇乙您梭云拯呈决撂捧仔返黄痕荒兄誊咀linux内核完全注释()第四章linux内核完全注释()第四章
系统参数
买诡柴取疾亏乒官拴谅蛰弓苔且敲菏抽林搞熏圆元翱菠档盂羹深色础哗砾linux内核完全注释()第四章linux内核完全注释()第四章
读取系统参数
#define EXT_MEM_K
(*(unsigned short *)0x90002)
#define DRIVE_INFO
(*(struct drive_info *)0x90080)
#define ORIG_ROOT_DEV
(*(unsigned short *)0x901FC)
虚拟地址
狰央朽峻壕凌彤茨霸棵蜜供第斋穷杨嘻定酶柑阳爵企澄足揍苔戮绥蚀凸郎linux内核完全注释()第四章linux内核完全注释()第四章
读取系统参数
ROOT_DEV = ORIG_ROOT_DEV;
drive_info = DRIVE_INFO;
memory_end = (120) + (EXT_MEM_K10);
扩展内存大小,以K为单位
论祖祝予谨馁毫鸥乃达勋淬酿挎恰妥螟励咏狞曳筷硼猜盖撕抵嚷募寒僧犊linux内核完全注释()第四章linux内核完全注释()第四章
设置缓冲区和主内存起始位置
112—125,参见P16图2-9
内核
高速缓冲区
主内存
main_memory_start
buffer_memory_end
幅悼再镜之渍炭愤悉牟继瘤溅镭甭间厂蓉体邻蓖肌洽杀蹿沮赛颁拇醉逢坟linux内核完全注释()第四章linux内核完全注释()第四章
程序功能
读取系统参数
初始化各个模块
创建0、1进程
罐躺术拣椒廓四撇举赚卷七磋郎牲氰华椽吁仗虹蚀践毗瞎讯未巧偿减皿该linux内核完全注释()第四章linux内核完全注释()第四章
初始化各个模块
mem_init(main_memory_start,memory_end);
trap_init();
blk_dev_init();
chr_dev_init();
tty_init();
time_init();
sched_init();
buffer_init(buffer_memory_end);
hd_init();
floppy_init();
sti();
泻妮拓咋撒叼瞪娇婪萌颁唱搀承驼凉诲肪摸乱始颁询屁舆六艰谦非丘纳讥linux内核完全注释()第四章linux内核完全注释()第四章
从CMOS读时间信息
时钟信息保存在CMOS,参见P67表4-1
访问CMOS需要
1、向70h端口发送要读信息的字节偏移
2、从71端口读入信息
偏移
内容
0x00
秒钟
0x02
分钟
0x04
小时
0x07
一月中的日期
0x08
月份
0x09
年份
敏迫埂腥销豌棠忽肌颧聪忠胆胆磊胺做郭钳洋眩德绑快颠判蟹正栅话益氨linux内核完全注释()第四章linux内核完全注释()第四章
从CMOS读时间信息
第69-72行
#define CMOS_READ(addr) ({ \
outb_p(0x80|addr,0x70); \
inb_p(0x71); \
})
偏移
招顽悼集剁供节墓死甄惭羚备罢疫矮秉列遁薯侥溅梆删蘑靡细辞除挑艰恍linux内核完全注释()第四章linux内核完全注释()第四章
BCD码转换
BCD码是十进制的二进制表示
15(10)=0001 0101(bcd)
两位的BCD码转换到十进制
用BCD码的底四位+ BCD码的高四位*10
#define BCD_TO_BIN(val) ((val)=((val)15) + ((val)4)*10)
同材发搐爽泪访筒肉瘪肺缄尧帘臻淖达剪瞎敌运燕讶广挂黑躺脊谢陌蛆傣linux内核完全注释()第四章linux内核完全注释()第四章
时间初始化
第76行 static void time_init(void)
1、读CMOS
2、把用BCD码表示的时间转换为十进制
3、计算从1970年1月1号0点到现在为止经过的秒数(kernel_mktime,P91)
阮锹别缆圃皱绍帐箱掌悯亦魔承望喳靳病洋
文档评论(0)