基于linux底層硬盤中斷輔助代碼的分析與設計.doc
約16頁DOC格式手機打開展開
基于linux底層硬盤中斷輔助代碼的分析與設計,基于linux底層硬盤中斷輔助代碼的分析與設計頁數(shù):16字數(shù):9468基于linux底層硬盤中斷輔助代碼的分析與設計【摘要】: 本文對linux早期操作系統(tǒng)內(nèi)核(0.11)的部分代碼——底層硬盤中斷輔助程序進行了詳細全面的分析,對的linux設備管理部分內(nèi)核源代碼和工作原理進行了解剖,并在分析后,作者進行了相類似程序設...
![](http://img.queshao.com/images/pcgzh.gif)
![](http://preview.queshao.com/tobuy/68134.gif)
內(nèi)容介紹
此文檔由會員 usactu 發(fā)布
基于Linux底層硬盤中斷輔助代碼的分析與設計
頁數(shù):16 字數(shù):9468
基于Linux底層硬盤中斷輔助代碼的分析與設計
【摘要】: 本文對Linux早期操作系統(tǒng)內(nèi)核(0.11)的部分代碼——底層硬盤中斷輔助程序進行了詳細全面的分析,對的Linux設備管理部分內(nèi)核源代碼和工作原理進行了解剖,并在分析后,作者進行了相類似程序設計——虛擬盤設計,從而進一步對操作系統(tǒng)的基本功能和實際實現(xiàn)方式獲得全方位的理解。
【關(guān)鍵字】: 底層硬盤 虛擬盤 驅(qū)動器 中斷 分區(qū)表 磁盤超級塊
1 前言
本文對Linux早期操作系統(tǒng)內(nèi)核(0.11)的部分代碼文件進行了詳細全面的分析,并在分析后,作者進行了相應程序設計,是一篇有關(guān)Linux(0.11)操作系統(tǒng)部分內(nèi)核基本工作原理的文章,主要目標是使用盡量少的篇幅,對部分的Linux內(nèi)核源代碼進行解剖,對操作系統(tǒng)的基本功能和實際實現(xiàn)方式獲得全方位的理解。能夠在僅可能短的時間內(nèi)做到對linux內(nèi)核代碼和基本工作原理有一個深刻的理解,使內(nèi)核的整體運作結(jié)構(gòu)能清晰地在腦海中形成。
在對早期部分內(nèi)核源代碼的分析過程中,作者已經(jīng)發(fā)現(xiàn),早期內(nèi)核源代碼幾乎就是目前所使用的較新內(nèi)核的一個精簡版本。通過閱讀Linux早期內(nèi)核版本的源代碼,是學習Linux系統(tǒng)的一種行之有效的途徑,并且對研究和應用Linux嵌入式系統(tǒng)也有很大的幫助。所以,作者通過對大量內(nèi)核版本進行比較和選擇后,最終選擇了與目前Linux內(nèi)核基本功能較為相近,又非常短小的0.11版內(nèi)核作為分析與設計的最佳版本,并且選擇了底層硬盤中斷輔助程序作為作者分析的對象,又根據(jù)相類似的原理,作者又進行了虛擬盤的設計。
2 底層硬盤中斷輔助源代碼及部分語句分析
#include
#include
#include
#include
#include
#include
#include
#include
#include "blk.h"
#define MAJOR_NR 3
#define CMOS_READ(addr)
({outb_p(0x80|addr,0x70);
inb_p(0x71);})
#define MAX_ERRORS 7
#define MAX_HD 2
static void recal_intr(void); // 硬盤中斷程序在復位操作時會調(diào)用的重新校正函數(shù)。
static int recalibrate=1; // 重新校正標志。
static int reset=1; // 復位標志。
/*下面結(jié)構(gòu)定義了硬盤參數(shù)及類型*/
struct hd_i_struct
{int head,sect,cyl,wpcom,lzone,ctl;};
#ifdef HD_TYPE // 如果已經(jīng)在include/linux/config.h 中定義了HD_TYPE…
struct hd_i_struct hd_info[]={ HD_TYPE }; // 取定義好的參數(shù)作為hd_info[]的數(shù)據(jù)。
#define NR_HD ((sizeof(hd_info))/(sizeof(struct hd_i_struct))) // 計算硬盤數(shù)。
#else // 否則,都設為0值。
struct hd_i_struct hd_info[]={{0,0,0,0,0,0},{0,0,0,0,0,0}};
static int NR_HD=0;
#endif
static struct hd_struct
{long start_sect;
long nr_sects;}hd[5*MAX_HD]={{0,0},};
#define port_read(port,buf,nr)
__asm__("cld;rep;insw"::"d"(port),"D"(buf),"c"(nr):"cx","di")
#define port_write(port,buf,nr)
__asm__("cld;rep;outsw"::"d"(port),"S"(buf),"c"(nr):"cx","si")
extern void hd_interrupt(void);
extern void rd_load(void);
-------------------------------------------------------------------------------
/*下面該函數(shù)只在初始化時被調(diào)用一次。用靜態(tài)變量callable作為可調(diào)用標志。*/
// 該函數(shù)的參數(shù)由初始化程序init/main.c的init子程序設置為指向0x90080處,此處存放著setup.s程序從BIOS取得的2個硬盤的基本參數(shù)表(32字節(jié))。
// 本函數(shù)主要功能是讀取CMOS和硬盤參數(shù)表信息,用于設置硬盤分區(qū)結(jié)構(gòu)hd,并加載RAM虛擬盤和根文件系統(tǒng)。
int sys_setup(void * BIOS)
{static int callable=1;
int i,drive;
unsigned char cmos_disks;
struct partition *p;
struct buffer_h
頁數(shù):16 字數(shù):9468
基于Linux底層硬盤中斷輔助代碼的分析與設計
【摘要】: 本文對Linux早期操作系統(tǒng)內(nèi)核(0.11)的部分代碼——底層硬盤中斷輔助程序進行了詳細全面的分析,對的Linux設備管理部分內(nèi)核源代碼和工作原理進行了解剖,并在分析后,作者進行了相類似程序設計——虛擬盤設計,從而進一步對操作系統(tǒng)的基本功能和實際實現(xiàn)方式獲得全方位的理解。
【關(guān)鍵字】: 底層硬盤 虛擬盤 驅(qū)動器 中斷 分區(qū)表 磁盤超級塊
1 前言
本文對Linux早期操作系統(tǒng)內(nèi)核(0.11)的部分代碼文件進行了詳細全面的分析,并在分析后,作者進行了相應程序設計,是一篇有關(guān)Linux(0.11)操作系統(tǒng)部分內(nèi)核基本工作原理的文章,主要目標是使用盡量少的篇幅,對部分的Linux內(nèi)核源代碼進行解剖,對操作系統(tǒng)的基本功能和實際實現(xiàn)方式獲得全方位的理解。能夠在僅可能短的時間內(nèi)做到對linux內(nèi)核代碼和基本工作原理有一個深刻的理解,使內(nèi)核的整體運作結(jié)構(gòu)能清晰地在腦海中形成。
在對早期部分內(nèi)核源代碼的分析過程中,作者已經(jīng)發(fā)現(xiàn),早期內(nèi)核源代碼幾乎就是目前所使用的較新內(nèi)核的一個精簡版本。通過閱讀Linux早期內(nèi)核版本的源代碼,是學習Linux系統(tǒng)的一種行之有效的途徑,并且對研究和應用Linux嵌入式系統(tǒng)也有很大的幫助。所以,作者通過對大量內(nèi)核版本進行比較和選擇后,最終選擇了與目前Linux內(nèi)核基本功能較為相近,又非常短小的0.11版內(nèi)核作為分析與設計的最佳版本,并且選擇了底層硬盤中斷輔助程序作為作者分析的對象,又根據(jù)相類似的原理,作者又進行了虛擬盤的設計。
2 底層硬盤中斷輔助源代碼及部分語句分析
#include
#include
#include
#include
#include
#include
#include
#include
#include "blk.h"
#define MAJOR_NR 3
#define CMOS_READ(addr)
({outb_p(0x80|addr,0x70);
inb_p(0x71);})
#define MAX_ERRORS 7
#define MAX_HD 2
static void recal_intr(void); // 硬盤中斷程序在復位操作時會調(diào)用的重新校正函數(shù)。
static int recalibrate=1; // 重新校正標志。
static int reset=1; // 復位標志。
/*下面結(jié)構(gòu)定義了硬盤參數(shù)及類型*/
struct hd_i_struct
{int head,sect,cyl,wpcom,lzone,ctl;};
#ifdef HD_TYPE // 如果已經(jīng)在include/linux/config.h 中定義了HD_TYPE…
struct hd_i_struct hd_info[]={ HD_TYPE }; // 取定義好的參數(shù)作為hd_info[]的數(shù)據(jù)。
#define NR_HD ((sizeof(hd_info))/(sizeof(struct hd_i_struct))) // 計算硬盤數(shù)。
#else // 否則,都設為0值。
struct hd_i_struct hd_info[]={{0,0,0,0,0,0},{0,0,0,0,0,0}};
static int NR_HD=0;
#endif
static struct hd_struct
{long start_sect;
long nr_sects;}hd[5*MAX_HD]={{0,0},};
#define port_read(port,buf,nr)
__asm__("cld;rep;insw"::"d"(port),"D"(buf),"c"(nr):"cx","di")
#define port_write(port,buf,nr)
__asm__("cld;rep;outsw"::"d"(port),"S"(buf),"c"(nr):"cx","si")
extern void hd_interrupt(void);
extern void rd_load(void);
-------------------------------------------------------------------------------
/*下面該函數(shù)只在初始化時被調(diào)用一次。用靜態(tài)變量callable作為可調(diào)用標志。*/
// 該函數(shù)的參數(shù)由初始化程序init/main.c的init子程序設置為指向0x90080處,此處存放著setup.s程序從BIOS取得的2個硬盤的基本參數(shù)表(32字節(jié))。
// 本函數(shù)主要功能是讀取CMOS和硬盤參數(shù)表信息,用于設置硬盤分區(qū)結(jié)構(gòu)hd,并加載RAM虛擬盤和根文件系統(tǒng)。
int sys_setup(void * BIOS)
{static int callable=1;
int i,drive;
unsigned char cmos_disks;
struct partition *p;
struct buffer_h