下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式Linux內(nèi)核體系結(jié)構(gòu)、lichao-PART ONE、嵌入式Linux系統(tǒng)調(diào)用、系統(tǒng)調(diào)用、概念所謂系統(tǒng)調(diào)用和內(nèi)核提供的強(qiáng)大函數(shù)系列。系統(tǒng)調(diào)用用戶進(jìn)程、通過某些特殊函數(shù)(如open)請求內(nèi)核服務(wù)、牙齒時暫停用戶進(jìn)程、請求內(nèi)核驗證用戶、嘗試、結(jié)果反饋用戶進(jìn)程、重新啟動用戶進(jìn)程在系統(tǒng)調(diào)用內(nèi)核中實現(xiàn)、以固定方式向用戶顯示系統(tǒng)調(diào)用,gate系統(tǒng)調(diào)用是用戶程序與內(nèi)核交互的界面。系統(tǒng)調(diào)用的作用系統(tǒng)調(diào)用是用戶界面在內(nèi)核中實現(xiàn)的,沒有系統(tǒng)調(diào)用牙齒,用戶就不能使用內(nèi)核。API/POSIX和C庫、API:應(yīng)用程序節(jié)目介面POSIX介面3360由IEEE提議,用于定義可移動操作系統(tǒng)接
2、口的標(biāo)準(zhǔn)、UNIX、DEC OpenVMS和windows 執(zhí)行使用者節(jié)目(例如3360fork)根據(jù)glibc的函數(shù)實作,取得系統(tǒng)調(diào)用編號,執(zhí)行int $0 X80產(chǎn)生中斷執(zhí)行位址空間轉(zhuǎn)換與堆疊切換,執(zhí)行SAVE_ALL。 (內(nèi)核模式)中斷處理,根據(jù)系統(tǒng)調(diào)用表調(diào)用內(nèi)核函數(shù)。運行內(nèi)核函數(shù)。運行RESTORE_ALL并返回用戶模式,分析系統(tǒng)調(diào)用sethostname(),功能:使用網(wǎng)絡(luò)中計算機(jī)的主機(jī)名設(shè)置:intsethostname (constchar * name,size _ t let在現(xiàn)有內(nèi)核程序中,要添加到新的函數(shù)連接中,必須編輯兩個文件。要修改的第一個文件為/usr/src/Li
3、nux/include/ASM-i386/unistd . h。牙齒文件包含為每個系統(tǒng)調(diào)用分配唯一編號的系統(tǒng)調(diào)用清單。文件中的每行均采用#define _NR_name NNN格式。其中,name替換為系統(tǒng)調(diào)用名稱,NNN是相應(yīng)的系統(tǒng)調(diào)用編號。必須將新系統(tǒng)調(diào)用名稱添加到列表的末尾,并指定編號序列中的下一個可用系統(tǒng)調(diào)用編號。我們的系統(tǒng)調(diào)用:# define _ _ NR _ mycall 191,第二個要修改的文件是/usr/src/Linux/arch/i386/kernel/entry數(shù)組,其中包含內(nèi)核的每個系統(tǒng)調(diào)用指針這將向數(shù)組中添加新的內(nèi)核函數(shù)指針。在列表末尾。Linux SYMBOL_
4、NAME(sys_mycall),(3)要重新配置新的Linux內(nèi)核以獲得新的系統(tǒng)調(diào)用效果,必須重新配置Linux內(nèi)核。要執(zhí)行此操作,必須以超級用戶身份登錄。#pwd/usr/src/linux#超級用戶必須位于當(dāng)前工作目錄(/usr/src/linux)上,才能重建內(nèi)核。# make config # makedep # make clearn # makeb zimage編譯完成后,將生成可用于安裝的壓縮內(nèi)核映像文件:/usr/src/Linux/arch/i33e同樣,出于實驗?zāi)康模覀儗⑸梢粋€簡單的內(nèi)核映像文件/* xtdy.c */_ syscall1 (int,mycall,in
5、t,ret) main () printf (%d n,mycall (100),如果您在新添加的系統(tǒng)調(diào)用mycall(int *number)牙齒/Armsys2410中,則在添加新系統(tǒng)調(diào)用后,下一步是在Linux內(nèi)核的其馀部分通知您程序的存在?,F(xiàn)有內(nèi)核程序需要編輯兩個文件以添加到新的函數(shù)連接中。第一個文件用于為:/arm sys 2410/kernel/include/ASM-arm/unistd . h系統(tǒng)調(diào)用分配唯一的編號。格式如下: # Define _ _ Define _ _ NR _ my call 226第二個文件位于3360/arm sys 2410/kernel/arch
6、/arm/kernel/ccall牙齒數(shù)組包含內(nèi)核中的每個系統(tǒng)調(diào)用指針。最后,添加新的內(nèi)核函數(shù)指針: long symbol _ name(sys _ my call),第三步。新的Linux內(nèi)核# pwd/arm sys 2410/kernel # makedep/# make clean # make zimage重新配置最后一個內(nèi)核映像檔案3360/armsys2410/kernel在使用新系統(tǒng)調(diào)用的應(yīng)用程序中新建_ syscall1 (int,mycall,int *,ret)/每個參數(shù)3360函數(shù)返回類型,第二個系統(tǒng)調(diào)用名稱,第三個傳入?yún)?shù)類型intmain (void) int *
7、 p * P一般來說,硬時鐘振動RC電路只要電源供應(yīng)裝置,總是保持振動。對于硬時鐘供電電路、軟時鐘、硬時鐘,軟時鐘(也稱為系統(tǒng)時鐘)由虛擬時鐘、嵌入式操作系統(tǒng)維護(hù),它是為了便于父軟件讀取硬時鐘而誕生的。每個系統(tǒng)啟動時的硬時鐘讀取時間、軟時鐘分配、系統(tǒng)電源中斷后操作系統(tǒng)結(jié)束、軟時鐘也不存在操作系統(tǒng)和應(yīng)用程序使用軟時鐘、系統(tǒng)時鐘數(shù)、在Linux系統(tǒng)中,打開設(shè)備電源時系統(tǒng)時鐘值讀取系統(tǒng)時鐘,啟動系統(tǒng)后繼續(xù)更新系統(tǒng)時鐘值,從而使整個ARM-Linux環(huán)境中的所有部件都可以將系統(tǒng)時鐘用作自己的行為基礎(chǔ)。系統(tǒng)時鐘值是整數(shù)值,與我們通常提到的“年、月、日、時、分、秒”不同。在Linux內(nèi)核中,系統(tǒng)時鐘值以累
8、計秒數(shù)顯示,從1970年1月1日00:0:00開始。我們把1970年1月1日00:00:00稱為新紀(jì)元時間,簡稱Epoch。時鐘周期的頻率,硬時鐘實際上是由晶體振蕩器產(chǎn)生的。晶體振蕩器在一秒內(nèi)產(chǎn)生的時鐘脈沖數(shù)是時鐘周期的頻率。Linux使用include/ASM-arm/arch-s3c 2400/Timex . h頭文件:# definecle中定義的CLOCK_TICK_RATE宏來指示輸入時鐘脈沖的頻率。至少2.0版到2 . 1 . 1版當(dāng)時時鐘中斷發(fā)生時,jiffies值加1。因此,jiffies值是自操作系統(tǒng)開始以來的時鐘tick數(shù)、時鐘tick,如果計數(shù)器減少到0,則將生成時鐘中斷
9、,即時鐘tick。通道0計數(shù)器的初始值確定在生成時鐘中斷之前需要多少時鐘周期,因此還確定時鐘tick talk時間間隔的長度。、PART II、系統(tǒng)時鐘數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)時鐘數(shù)據(jù)結(jié)構(gòu)、struct timeval time _ ttv _ sec/* seconds */suseconds _ ttv _ usec;/* microseconds */;Tv_sec是從1970年1月1日開始計算的秒數(shù)。tv_usec是當(dāng)前秒內(nèi)的微秒(10E-6second)數(shù)據(jù)類型time_t和suseconds_t是ARM-linux系統(tǒng)上的long類型。ARM-Linux定義了存儲系統(tǒng)當(dāng)前時間的全局變量xti
10、me牙齒,xtime的數(shù)據(jù)類型為struct timeval。系統(tǒng)時區(qū)數(shù)據(jù)結(jié)構(gòu),struct time zone int tz _ minutes west;Inttz _ dsttime。在ARM-Linux系統(tǒng)上,每個用戶都可以設(shè)置自己的時區(qū),但系統(tǒng)內(nèi)核會保留格林尼治時間。在系統(tǒng)時區(qū)數(shù)據(jù)結(jié)構(gòu)中,tz_minuteswest成員表示牙齒時區(qū)和格林尼治時間之間的差異。Tz_dsttime成員表示時間的修改方式。需要修改時間的原因是由于夏令的出現(xiàn),現(xiàn)在Linux內(nèi)核中的夏令已廢棄,因此牙齒成員沒有任何意義。初始化時將值指定為0意味著不需要修改。ARM-Linux系統(tǒng)定義了存儲系統(tǒng)當(dāng)前時區(qū)的全局變
11、量sys_tz。時間結(jié)構(gòu),電腦使用秒和epoch表示時間,但對現(xiàn)實世界的人來說,他們更習(xí)慣使用“年、月、日、分、秒”等計時方法,因此在ARM-Linux系統(tǒng)中提供轉(zhuǎn)換方法和相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。在Linux系統(tǒng)上,數(shù)據(jù)結(jié)構(gòu)structtm、structtm Linux _ sec用于說明時間;Inttm _ minInttm _ hourInttm _ mdayInttm _ monInttm _ yearInttm _ wdayInttm _ ydayInttm _ isdst。32位無符號整數(shù),表示第III部分、系統(tǒng)時鐘全局變量、全局變量jiffies和自系統(tǒng)啟動以來的時鐘滴答數(shù)。每次出現(xiàn)時鐘t
12、imer時,內(nèi)核的時鐘中斷處理函數(shù)timer_interrupt()都會在全局變量jiffies中加1。牙齒變量在內(nèi)核/timer.c源文件中定義如下:unsigned long volatile jiffies使用限定符volatile指示jiffies是容易變化的變量。因此,編譯器時不能通過CPU內(nèi)部cache訪問變量。全局變量xtime是timeval結(jié)構(gòu)類型的變量,表示當(dāng)前時間間隔UNIX時間間隔1970 01 01 00: 00: 00的相對秒值。Linux內(nèi)核通過kernel/timer.c文件中定義的timeval結(jié)構(gòu)類型的全局變量xtime保留當(dāng)前時間,如下所示:volatil
13、e struct timeval xtime _ _ attribute _ _全局變量xtime牙齒的當(dāng)前時間通常用于用戶發(fā)現(xiàn)和設(shè)置,其他內(nèi)核模塊通常很少使用(其他內(nèi)核模塊最常用jiffies),因此xtime更新通常不是緊迫的任務(wù),因此通常需要時鐘中斷下半部分(全局變量Timezone結(jié)構(gòu)類型在include/linux/time.h頭文件中定義。根據(jù)上面的結(jié)構(gòu),Linux將內(nèi)核/時間:在c文件中定義全局變量sys_tz,以指示系統(tǒng)當(dāng)前所在的時區(qū)信息。struct timezone sys _ tz,PART IV,初始化系統(tǒng)時鐘,啟動系統(tǒng)時,ARM-Linux初始化硬件和軟件時鐘/init/main . cstart _ kernel()time _ init();void _ _ inittime _ init(void)xtime . TV _ usec=0;xtime . TV _ sec=0;setup _ timer();/include/ASM-arm/arch-s3c 2410/time . h static inline void setup _ timer(void)struct timer unsignsgettime offset=s3c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026江蘇連云港市灌云萬邦人力資源有限公司招聘10人考試備考試題及答案解析
- 2025年港大中國語言文學(xué)筆試及答案
- 2025年臨沂下半年事業(yè)編考試及答案
- 2025年撫州國企招聘筆試及答案
- 2025年秘書職業(yè)技能大賽筆試題及答案
- 2025年沈陽工程輔導(dǎo)員筆試及答案
- 2025年杭商傳媒記者崗筆試及答案
- 2025年百度財務(wù)助理筆試及答案
- 湖北省省屬國企外包員工招聘3人筆試備考試題及答案解析
- 2025年農(nóng)職院中職筆試真題及答案
- 城市軌道交通服務(wù)員(城市軌道交通站務(wù)員)考核要素細(xì)目表與考核內(nèi)容結(jié)構(gòu)表
- JBT 12530.4-2015 塑料焊縫無損檢測方法 第4部分:超聲檢測
- 江西省吉安市初中生物七年級期末下冊高分預(yù)測題詳細(xì)答案和解析
- 《中國心力衰竭診斷和治療指南2024》解讀(總)
- DZ∕T 0033-2020 固體礦產(chǎn)地質(zhì)勘查報告編寫規(guī)范(正式版)
- 瀝青拌合站方案
- (汪曉贊)運動教育課程模型
- GB/T 42677-2023鋼管無損檢測無縫和焊接鋼管表面缺欠的液體滲透檢測
- 輪機(jī)英語題庫
- 神木市孫家岔鎮(zhèn)神能乾安煤礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 藥店質(zhì)量管理制度執(zhí)行情況檢查考核記錄表
評論
0/150
提交評論