freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

—嵌入式系統(tǒng)軟件開發(fā)技術(shù)-資料下載頁(yè)

2025-07-17 19:58本頁(yè)面
  

【正文】 守護(hù)進(jìn)程:在超級(jí)用戶下運(yùn)行的一個(gè)用戶進(jìn)程,與核心建立一個(gè) IPC通道。 Kerneld調(diào)用 insmod和 rmmond來(lái)裝入和移出模塊。kerneld裝入的 module,一般放在 /lib/modules/kernelversion目錄下。 ? insmod 命令調(diào)用 sys_get_kernel_sys()系統(tǒng)調(diào)用收集核心中所有符號(hào)來(lái)解決 module中資源引用問題 。 模塊基礎(chǔ) ——裝入 ? 符號(hào)表的記錄有兩個(gè)域:符號(hào)的名字( symbol name)和符號(hào)的值(一般是符號(hào)的地址)。核心提供的符號(hào)表在 module 鏈表最尾 module中。 ? insmod調(diào)用 sys_create_module(),為新module分配一個(gè) module數(shù)據(jù)結(jié)構(gòu),掛在module_list頭上 ,置新 module 狀態(tài)為UNINITIALIZED。 ? 當(dāng)初始化 module時(shí), insmod調(diào)用sys_init_module()系統(tǒng)調(diào)用,將 module的初始化和清除函數(shù)作為參數(shù)傳遞。修改核心的符號(hào)表,同時(shí)系統(tǒng)需要修改新 module依賴的所有module中的相關(guān)指針。 模塊基礎(chǔ) ——卸載 ? Rmmod命令 ? Kerneld進(jìn)程自動(dòng)卸載 自動(dòng)卸載的機(jī)制為:每隔一定的時(shí)間, kerneld 調(diào)用sys_delete_module()系統(tǒng)調(diào)用,將它裝入的且不在被使用的 module從系統(tǒng)中卸載。它遍歷 module_list,檢查被它裝入( AUTOCLEAN)并且不用( VISITED標(biāo)志)的模塊。 ?內(nèi)核模塊必須有兩個(gè)函數(shù): int init_module(): 為 內(nèi)核中的某些東西注冊(cè)一個(gè)句柄,或者把內(nèi)核中的程序提換成它自己的代碼(通常是進(jìn)行一些工作以后再調(diào)用原來(lái)工作的代碼)。 void clean_module():模塊要求撤銷 init_module進(jìn)行的所有修改,使得模塊可以被安全的卸載。 在 insmod和 rmmod命令中使用這兩個(gè)函數(shù)。 ? Use count:記錄使用本模塊的進(jìn)程數(shù)或模塊數(shù)。 MOD_INC_USE_COUNT:增加 use count MOD_DEC_USE_COUNT:減少 use count MOD_IN_USE:檢查 use count是否是 0 模塊基礎(chǔ) ——數(shù)據(jù)結(jié)構(gòu) ? struct module{ struct module *next。 struct module_ref *ref。 /* 所有引用該模塊的模塊 ,也用鏈表連接 */ struct symbol_table *symtab。 /*符號(hào)表 */ const char *name。 /*模塊的名字 , 存放在 module結(jié)構(gòu)后面的 64個(gè)字節(jié)里 */ int size。 /* size of module in pages */ void* addr。 /* address of module */ int state。 /*三種狀態(tài):未初始化 , 運(yùn)行 , 刪除 */ void (*cleanup)(void)。 /* cleanup routine */ }。 struct symbol_table { int size。 /* 包括 string table的總長(zhǎng)度 */ int n_symbols。 int n_refs。 struct internal_symbol symbol[0]。 struct module_ref ref[0]。 }。 后面定義的是兩個(gè)零大小的數(shù)組聲明,便于動(dòng)態(tài)分配空間。 symbol包含一組字符串指針,指向真正的符號(hào)字符串表 struct internal_symbol { /*符號(hào)信息 */ void *addr。 const char *name。 /*指向 string table*/ }。 struct module_ref { /*引用信息 */ struct module *module。 struct module_ref *next。 }。 string table的內(nèi)容是該模塊導(dǎo)出的函數(shù)名和變量名 n e x trefs i z en a m es y m b o la d d rc l e a n u ps t a t em o d u l em o d u l e 39。 sc o d es i z en _ s y m b o l sn _ r e f sa d d ra d d rm o d u l en a m en a m en e x tn e x tm o d u l es y m b o l _ t a b l ei n t e r n a l _ s y m b o l 結(jié)構(gòu)m o d u l e _ r e f 結(jié)構(gòu)s t r i n g t a b l en a m e i sh e r e圖 1 m o d u l e 與 s y m b o l _ t a b l e 的 結(jié) 構(gòu) 示意 圖模塊基礎(chǔ) ——系統(tǒng)調(diào)用 ? Sys_create_module 為模塊分配空間 , 將模塊鏈入系統(tǒng)的模塊鏈中 ? Sys_init_module 初始化模塊 , 修正指針使模塊正常工作 ? Sys_delete_module 從系統(tǒng)模塊鏈中刪除模塊 , 釋放內(nèi)存空間 ? Sys_get_kernel_syms 將系統(tǒng)的所有符號(hào)表全部取出到用戶空間 核心空間i n s m o d 用戶進(jìn)程空間My mo du l e 目標(biāo)文件ke r ne lmo d ul eke r ne lsy m bo lmo d ul eAsy m bo lAke r ne l_ sy m結(jié)構(gòu)My m od ul eMy m od ul eMy s ym bo l磁盤內(nèi)存1234圖 i n s m od M y m o d u l e 的過程① insmod先調(diào)用系統(tǒng)調(diào)用 sys_get_kernel_syms,將當(dāng)前加到系統(tǒng)中的模塊和核心的符號(hào)表全部輸出到 kernel_sym結(jié)構(gòu)中 , 為后面使用 。 這個(gè)結(jié)構(gòu)的內(nèi)容在 insmod用戶進(jìn)程空間 。 ② 將 Mymodule目標(biāo)文件讀進(jìn) insmod用戶進(jìn)程空間 , 成為一個(gè)映像 。 ③ 根據(jù)第一步得到的信息 , 將 Mymodule映像中的地址沒有確定的函數(shù)和變量一一修正過來(lái) 。 ④調(diào)用系統(tǒng)調(diào)用 sys_create_module、sys_init_module,將 Mymodule鏈入到系統(tǒng)中去。 ? 內(nèi)核模塊的編譯 需要用 c選項(xiàng)進(jìn)行編譯 。 所有的內(nèi)核模塊都必須包含特定的標(biāo)志: __KERNEL__:這個(gè)標(biāo)志告訴頭文件此代碼將在內(nèi)核模塊中運(yùn)行 , 而不是作為用戶進(jìn)程 。 MODULE:這個(gè)標(biāo)志告訴頭文件要給出適當(dāng)?shù)膬?nèi)核模塊的定義 。 LINUX: 從技術(shù)上講,這個(gè)標(biāo)志不是必要的。用于比較正規(guī)的內(nèi)核模塊,在多個(gè)操作系統(tǒng)上編譯,這個(gè)標(biāo)志將會(huì)使你感到方便。它可以允許你在獨(dú)立于操作系統(tǒng)的部分進(jìn)行常規(guī)的編譯。 例: gcc Wall DMODULE D__KERNEL__ DLINUX D表示加入標(biāo)志 用戶空間設(shè)備驅(qū)動(dòng)程序 ? 有時(shí)不需要真正的驅(qū)動(dòng)程序: 沒有兩個(gè)以上的應(yīng)用程序使用設(shè)備 并且不需要響應(yīng)中斷 沒有多個(gè)進(jìn)程訪問 不管理資源 ? 例: vgalib庫(kù) 早期的鼠標(biāo)轉(zhuǎn)換 設(shè)備驅(qū)動(dòng)程序框架 ——接口 ? Linux設(shè)備驅(qū)動(dòng)程序與外界的接口 ,通過file_operations(include/linux/)完成。 ,初始化設(shè)備。 。與具體設(shè)備相關(guān)。 驅(qū)動(dòng)程序框架 ——功能 ? 驅(qū)動(dòng)程序的注冊(cè)與注銷 ? 設(shè)備的打開與釋放 ? 設(shè)備的讀寫操作 ? 設(shè)備的控制操作 ? 設(shè)備的中斷和輪詢處理 初始化函數(shù)的調(diào)用關(guān)系 ? 系統(tǒng)轉(zhuǎn)入核心 , 調(diào)用函數(shù) start_kernel() 。 它調(diào)用kernel_thread (init, NULL, 0), 創(chuàng)建 init進(jìn)程進(jìn)行系統(tǒng)配置 ( 其中包括所有設(shè)備的初始化工作 ) 。 sys_setup() device_setup() chr_dev_init()/blk_dev_init() Kernel_thread() init() setup() 注冊(cè)與注銷 ? 注冊(cè)和注銷函數(shù): register_*dev() unregister_*dev() //include/linux/ ? 所謂注冊(cè)就是在內(nèi)核的 chrdevs或 blkdevs中添加一項(xiàng)。 struct device_struct { const char * name。 struct file_operations * fops。 }。 相同主設(shè)備號(hào)的 fops元素內(nèi)容相同 。 打開與釋放 ? 打開設(shè)備: open() 檢查與設(shè)備有關(guān)的錯(cuò)誤,如未準(zhǔn)備好。 如果是首次打開,則初始化設(shè)備。 確定次設(shè)備號(hào),根據(jù)需要可更新設(shè)備的 f_op。 如果需要,分配且設(shè)置文件中的 private_data。 遞增設(shè)備使用的計(jì)數(shù)器。 如果只允許一個(gè)進(jìn)程使用設(shè)備,則需要設(shè)忙標(biāo)志。 ?釋放設(shè)備: release() 遞減設(shè)備使用的計(jì)數(shù)器 釋放設(shè)備文件中的私有數(shù)據(jù)所占空間 如果是獨(dú)占設(shè)備,則要清除忙標(biāo)志,使其他進(jìn)程可以使用 如果是最后一個(gè)釋放,則關(guān)閉設(shè)備 設(shè)備的讀寫操作 ? 字符設(shè)備: foo_read()和 foo_write() ? 塊設(shè)備 block_read和 block_write()——策略規(guī)程,不需要在驅(qū)動(dòng)程序中實(shí)現(xiàn)。 通過緩沖區(qū)讀寫,只在數(shù)據(jù)不在緩沖區(qū)時(shí)才真正執(zhí)行數(shù)據(jù)傳輸,通過 request_fn()完成。 struct blk_dev_struct struct request 設(shè)備的控制 ? ioctl() 一般做法是: 首先差錯(cuò)檢查, 然后用一個(gè)大的 switch語(yǔ)句(可能是內(nèi)嵌的)來(lái)處理所有可能的 ioctl命令。 返回: 出錯(cuò)返回 erro 其他情況由用戶定義 字符設(shè)備驅(qū)動(dòng)程序 ? 數(shù)據(jù)結(jié)構(gòu) ? 注冊(cè)與注銷 ? 輪詢和中斷 對(duì)應(yīng)驅(qū)動(dòng)程序的 “ 三個(gè)接口 ” 。 添加一個(gè)簡(jiǎn)單的字符設(shè)備 ? 確定主設(shè)備號(hào) ? 編寫 file_operations中的函數(shù)以及中斷處理函數(shù)。 ? 編寫初始化函數(shù) foo_init() ? 在 chr_dev_init()中添加調(diào)用和返回初始化函數(shù)的代碼。 ? 修改 drivers/char/Makefile; 假設(shè)我們把所以必要的函數(shù)寫 , 則在“ L_OBJS := \” 行把“ ” 加到其中 。 ?將該設(shè)備私有的 *.c, *.h復(fù)制到目錄 drivers/char下 。 ?用命令: make clean。make dep。make zImage重新編譯內(nèi)核 。 ?用 mknod命令在目錄 /dev下建立相應(yīng)主設(shè)備號(hào)的用于讀寫的特殊文件 mknod命令:建立設(shè)備特殊文件 格式: mknod 文件名 類型 主設(shè)備號(hào) 次設(shè)備號(hào) 類型: c或 b, 代表字符設(shè)備或塊設(shè)備 塊設(shè)備驅(qū)動(dòng)程序 ? 數(shù)據(jù)結(jié)構(gòu) ? 注冊(cè)與注銷 ? 讀寫請(qǐng)求及其處理 增加一個(gè)塊設(shè)備的方法和字符設(shè)備差不多。 塊設(shè)備不需要編寫 file_operations結(jié)構(gòu)里的 read和 write函數(shù),但是也需要 read和 write在request中調(diào)用。 需要有請(qǐng)求處理函數(shù),以及中斷處理函數(shù)。 嵌入式網(wǎng)絡(luò)技術(shù) TCP/IP協(xié)議簡(jiǎn)介 ? TCP/IP協(xié)議是一套把因特網(wǎng)上的各種系統(tǒng)互連起來(lái)的協(xié)議組,保證因特網(wǎng)上數(shù)據(jù)的準(zhǔn)確快速傳輸 ? 參考開放系統(tǒng)互連 (OSI)模型, TCP/IP通常采用一種簡(jiǎn)化的四層模型 : ? 應(yīng)用層 ? 傳輸層 ? 網(wǎng)絡(luò)層 ? 鏈路層 TCP協(xié)議的實(shí)現(xiàn) ? TCP協(xié)議是面向連接的、端對(duì)端的可靠通信協(xié)議。 ? 它采用了許多機(jī)制來(lái)保證可靠傳輸,應(yīng)用于嵌入式系統(tǒng)顯得過于復(fù)雜 ? TCP協(xié)議數(shù)據(jù)傳輸可分為三個(gè)階段:建立連接、傳輸數(shù)據(jù)和斷開連接。 ? 它的實(shí)現(xiàn)過程可以用狀態(tài)機(jī)來(lái)描述。 TCP連接建立 ? 建立連接有兩
點(diǎn)擊復(fù)制文檔內(nèi)容
外語(yǔ)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1