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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于arm9的linux系統(tǒng)移植與驅(qū)動(dòng)開發(fā)-資料下載頁

2024-12-03 19:39本頁面

【導(dǎo)讀】題目名稱:基于ARM9的Linux系統(tǒng)移植與驅(qū)動(dòng)開發(fā)

  

【正文】 靠的文件保密和保護(hù)措施,提供文件的安全措施。 文件存放規(guī)則 為了實(shí)現(xiàn)各種 Linux 版本系統(tǒng)的標(biāo)準(zhǔn)化,各種不同的 Linux 版本都會(huì)根據(jù)FHS( FilesystemHierarchy Standard)標(biāo)準(zhǔn)來進(jìn)行系統(tǒng)管理 [20],這也使得 Linux 系統(tǒng)的兼容性大大提高。 FHS 規(guī)定了兩級(jí)目錄,第一級(jí)是根目錄下的主要目錄,根據(jù)目錄名稱可以得知其中應(yīng)該放置什么樣的文件,比如 /etc 應(yīng)該放置各種配置文件, /bin 和 /sbin 目錄下應(yīng)該放置相應(yīng)的可執(zhí)行文件等;第二級(jí)目錄則主要針對(duì) /usr 和 /var 做出了更深層目錄的定義。 Unix/Linux 系統(tǒng)很長(zhǎng)時(shí)間以來一直是在“什么文件放在哪里”的基礎(chǔ)之上建立文件存放規(guī)則的,并且按照這些規(guī)則把文件放進(jìn)相應(yīng)分級(jí)結(jié)構(gòu)里。文件系統(tǒng)分級(jí)結(jié)構(gòu)標(biāo)準(zhǔn)( FHS)試圖以一種合乎邏輯的方式定義這些規(guī)則,而且在 Linux 上得到 了廣泛應(yīng)用。按照 FHS 標(biāo)準(zhǔn) [21], 在 Linux 下存放文件主要有以下 規(guī)則: 1.把全局配置文件放入 /etc 目錄下。 2.將設(shè)備文件信息放入 /dev 目錄下,設(shè)備名可以作為符號(hào)鏈接定位在 /dev 中或/dev 子目錄中的其他設(shè)備存在。 3.操作系統(tǒng)核心定位在 /或 /boot,若操作系統(tǒng)核心不是作為文件系統(tǒng)的一個(gè)文件存在,不應(yīng)用它。 4.庫存放的目錄是 /lib。 5.存放系統(tǒng)編譯后的可執(zhí)行文件、命令的目錄是 /bin, /sbin, /usr。 制作 JFFS2 根文件系統(tǒng) Linux 的根文件系統(tǒng)具有非常獨(dú)特的特點(diǎn),就其基本組成來說, Linux 的根文件系統(tǒng)應(yīng)該包括支持 Linux 系統(tǒng)正常運(yùn)行的基本內(nèi)容,包含著系統(tǒng)使用的軟件和庫,以及所有用來為用戶提供支持架構(gòu)和用戶使用的應(yīng)用軟件。因此,至少應(yīng)包括以下幾項(xiàng)內(nèi)容。 1.基本的文件系統(tǒng)結(jié)構(gòu),包含一些必需的目錄比如: /dev, /proc, /bin, /etc, /lib,/usr, /tmp 等。 2.基本程序運(yùn)行所需的庫函數(shù),如 Glibc/uClibc。 19 3.基本的系統(tǒng)配置文件,比如 rc, inittab 等腳本文件。 4.必要的設(shè)備文件支持: /dev/hd*, /dev/tty*, /dev/fd0。 5.基本的應(yīng)用程序,如 sh, ls, cp, mv 等。 構(gòu)造目錄 構(gòu)造 glibc 庫 使用相同的交叉編譯工具鏈編譯 make menuconfig (指定編譯前綴 ) make CONFIG_PREFIX=/dir install mkdir /dir /lib p 查看 busybox 依賴的庫 ,并拷貝相應(yīng)庫文件到文件系統(tǒng)目錄里的 lib 目錄 strings busybox | grep ^lib 構(gòu)造 etc/ /etc/fstab /etc/為該腳本添加可執(zhí)行屬性: sudo chmod +x etc/ /etc/inittab Linux 啟動(dòng)時(shí),運(yùn)行一個(gè)叫作 init 的程序,然后根據(jù)運(yùn)行級(jí)啟動(dòng)后面的任務(wù),包括多用戶環(huán)境,網(wǎng)絡(luò)等。所謂的運(yùn)行級(jí)就是操作系統(tǒng)當(dāng)前正在運(yùn)行的功能級(jí)別。這個(gè)級(jí)別從 0~ 6,具有不同的功能。這些級(jí)別在 /etc/inittab 文件里指定。這個(gè)文件是 init 程序?qū)ふ业闹饕募?init 進(jìn)程中所做的每一步配置工作都由 /etc/initab 中的內(nèi)容來決定 的。 構(gòu)造 dev/ sudo mknod console c 5 1 sudo mknod null c 1 3 其他 mkdir sys tmp proc mnt root 安裝 jffs2 制作工具 20 ./configure shared prefix=/usr make sudo make install make sudo make install 制作 jffs2 文件系統(tǒng) n s 2048 e 0x20210 d fs_new_box o 21 5 Linux 驅(qū)動(dòng) 程序 Linux 驅(qū)動(dòng)程序簡(jiǎn)介 Linux 的設(shè)備驅(qū)動(dòng)程序是位于硬件和內(nèi)核之間的一層軟件接口,它主要完成對(duì)硬件的初始化、讀、寫和控制等操作,當(dāng)應(yīng)用程序需要訪問具體的硬件設(shè)備時(shí),它將通過內(nèi)核來調(diào)用標(biāo)準(zhǔn)的接口函數(shù)完成對(duì)硬件設(shè)備的訪問。 Linux 將硬件設(shè)備分為三種基本的類型,字符設(shè)備、塊設(shè)備 和網(wǎng)絡(luò)設(shè)備,因此對(duì)應(yīng)三種類型的設(shè)備驅(qū)動(dòng)程序,字符設(shè)備是一種以字節(jié)流方式、順序進(jìn)行訪問的設(shè)備,它不需要經(jīng)過系統(tǒng)的緩沖,字符設(shè)備驅(qū)動(dòng)程序一般都實(shí)現(xiàn)了 open, write, read 等系統(tǒng)調(diào)用,應(yīng)用程序可以通過設(shè)備文件來訪問字符設(shè)備,常用的字符設(shè)備有鼠標(biāo)、觸摸屏等,塊設(shè)備可以用任意順序?qū)ζ溥M(jìn)行訪問,以塊為單位進(jìn)行操作,它經(jīng)過系統(tǒng)的緩沖,塊設(shè)備向用戶層提供的接口與字符設(shè)備一樣,兩者最主要的區(qū)別是塊設(shè)備上一般要建立文件系統(tǒng),塊設(shè)備驅(qū)動(dòng)程序除了向用戶層提供接口外,還要向系統(tǒng)的其他部分提供接口,常用的塊設(shè)備有光盤、硬盤等 ,網(wǎng)絡(luò)設(shè)備是面向數(shù)據(jù)包的發(fā)送和接收而定義的一類設(shè)備,內(nèi)核為網(wǎng)絡(luò)設(shè)備提供了一套和數(shù)據(jù)包傳輸相關(guān)的函數(shù),內(nèi)核與網(wǎng)絡(luò)設(shè)備的通信方式完全不同于字符設(shè)備和塊設(shè)備。 Linux 內(nèi)核的整體結(jié)構(gòu)龐大,包含的組件很多,如果編譯時(shí)將所有的組件都包含進(jìn)去,不僅增加了編譯的時(shí)間,而且當(dāng)有些組件的功能不經(jīng)常使用時(shí),又增加了內(nèi)核的臃腫,降低了內(nèi)核執(zhí)行的效率,因此, Linux 提供了一種模塊化的機(jī)制(可以在運(yùn)行時(shí)動(dòng)態(tài)的添加到內(nèi)核的代碼,稱為一個(gè)模塊),編譯過后的內(nèi)核本身不包含所有的功能,而當(dāng)需要使用到這些功能時(shí) [21],就將其實(shí)現(xiàn)此功能 的模塊動(dòng)態(tài)的加載到內(nèi)核中,模塊被加載后,就跟內(nèi)核其他的部分完全一樣 [22]。 Linux 驅(qū)動(dòng)程序構(gòu)成 Linux 的內(nèi)核模塊主要由以下三部分構(gòu)成: (1) 模塊 裝載 函數(shù) 內(nèi)核模塊的 裝 載函數(shù)一般 用于 完成模塊的初始化工作 ,如空間分配、設(shè)備注冊(cè)、地址映射等 。 使用宏 module_init(函數(shù)名 )可以告訴內(nèi)核需要調(diào)用的裝載函數(shù), 在通過模塊裝載函數(shù)裝載模塊時(shí),該函數(shù)被系統(tǒng)調(diào)用,內(nèi)核為其分配設(shè)備信息(主次設(shè)備號(hào)、設(shè)備節(jié)點(diǎn)),當(dāng)需要使用該模塊時(shí)內(nèi)核會(huì)檢索設(shè)備信息,然后調(diào)用模塊。 (2) 模塊卸載函數(shù) 內(nèi)核模塊的卸載函數(shù)一般以 _exit 前綴聲明,此函數(shù)只在模塊卸載時(shí) 被系統(tǒng)調(diào)用 ,執(zhí)行完畢后, 其 占用內(nèi)存被系統(tǒng)釋放, 與模塊裝載函數(shù)相似, 使用宏 module_exit(函數(shù)名 )告知內(nèi)核卸載模塊時(shí)需要調(diào)用的 卸載函數(shù)。模塊卸載函數(shù)與模塊 裝 載函數(shù) 相對(duì) , 如空間釋放、設(shè)備注銷、取消地址映射等 。 22 (3) 模塊許可證聲明 它 指 明 了 模 塊 許 可 權(quán) 限 , 通 常 使 用 GPL 通 用 公 共 許 可 證 ,MODULES_LICENSE(“GPL”), 如果未聲明許可權(quán)限,內(nèi)核會(huì)提示錯(cuò)誤。 驅(qū)動(dòng)程序調(diào)用過程 圖 51 應(yīng)用程序操作硬件過程 Figure51 The application process of hardware operation 驅(qū)動(dòng)程序用于硬件操作的具體實(shí)現(xiàn),并為應(yīng)用程序提供接口,使得應(yīng)用程序可以通過簡(jiǎn)單的函數(shù)調(diào)用實(shí)現(xiàn)對(duì)硬件的操作, 應(yīng)用程序開發(fā)人員無需了解其實(shí)現(xiàn)的過程。圖 51 反映出應(yīng)用程序?qū)崿F(xiàn)硬件操作的過程,應(yīng)用程序調(diào)用簡(jiǎn)單的 open、read、 write 等函數(shù),這些函數(shù)通過驅(qū)動(dòng)程序中的 file_operations 結(jié)構(gòu)體與驅(qū)動(dòng)程序中硬件具體實(shí)現(xiàn)的函數(shù)建立聯(lián)系,硬件具體實(shí)現(xiàn)相關(guān)函數(shù)進(jìn)行與硬件間的交互,從而實(shí)現(xiàn)軟件對(duì)硬件的控制。 Linux 字符設(shè)備驅(qū)動(dòng)程序 圖 52 字符設(shè)備驅(qū)動(dòng)框架 Figure52 Character device drivers framework mdev 可以根據(jù)設(shè)置自動(dòng)生成字符設(shè)備節(jié)點(diǎn),使用它的時(shí)候需要先創(chuàng)建一個(gè)名為 A 的 class,然后再創(chuàng)建一個(gè)名為 B 的 device,當(dāng)驅(qū)動(dòng)程序被裝載的時(shí)候,就會(huì)以如下形式自動(dòng)生成 sys/class/A/B/dev 文件, dev 存放了創(chuàng)建字符設(shè)備的主o p enr ea dw r i t e. . . . . .f i l e _ o p er a t i o n s結(jié)構(gòu)體xxx _ o p enxxx _ r ea dxxx _ w r i t e ...調(diào)用應(yīng)用程序 驅(qū)動(dòng)程序 硬件交互字符設(shè)備驅(qū)動(dòng)程序框架1 、 驅(qū)動(dòng)裝載M o d u l e _ i n i t2 、 設(shè)備操作實(shí)現(xiàn)3 、 驅(qū)動(dòng)卸載M o d u l e _ exi t2 . 1 、 f i l e _ o p er a t i o n s結(jié)構(gòu)體r ea dw r i t eo p enc l o s e. . . . . .手動(dòng)分配自動(dòng)分配1 . 1 、 分配 c d ev1 . 2 、 初始化 i n i t _ c d ev1 . 3 、 注冊(cè) a d d _ c d ev1 . 4 、 硬件初始化3 . 1 、 釋放 c d ev _ d el3 . 2 、 注銷u n r eg i s t er _ c d ev 23 次設(shè)備號(hào),應(yīng)用程序通過字符設(shè)備節(jié)點(diǎn)名和設(shè)備號(hào)來調(diào)用相應(yīng)的驅(qū)動(dòng)程序。 根據(jù)字符設(shè)備驅(qū)動(dòng)框架 分析點(diǎn)亮 LED 的驅(qū)動(dòng)程序 , 為實(shí)現(xiàn)應(yīng)用程序控制開發(fā)板上 gpf4,5,6 三個(gè)引腳上的 led 開關(guān),從入口函數(shù)開始,首先讓內(nèi)核自動(dòng)分配設(shè)備號(hào)給字符設(shè)備 LEDS,并且建立 LEDS 設(shè)備節(jié)點(diǎn)和 myleds_fops 的聯(lián)系,但此時(shí) LEDS 設(shè)備節(jié)點(diǎn)實(shí)際并不存在,從前文對(duì) linux 介紹可知, linux 一直貫徹著一切皆文件的思想,還需要手動(dòng)或通過 mdev 生成 LEDS 設(shè)備節(jié)點(diǎn)文件,否則應(yīng)用程序訪問該驅(qū)動(dòng)程序時(shí)必將訪問失敗。內(nèi)核掛載文件系統(tǒng)時(shí)已經(jīng)開啟 MMU,而對(duì)于 GPIO 寄存器的操作是對(duì)物理地址進(jìn)行,因此還需要使 用 ioremap 函數(shù)將物理地址映射為虛擬地址。通過 file_operations 建立 open 和 myled_open 的聯(lián)系以及 write 和 myled_open 的聯(lián)系。 myled_open 來設(shè)置 GPF4,5,6 三引腳為輸出引腳;通過 myled_write 來操作 GPIO 的輸出以控制 led 的開關(guān)。測(cè)試程序中通過open、 write 來操作 LEDS 設(shè)備節(jié)點(diǎn),設(shè)備節(jié)點(diǎn)文件屬性包含了設(shè)備文件的屬性(設(shè)備類 型:字 符設(shè) 備、塊 設(shè)備等 ,設(shè)備 的主次 設(shè)備號(hào) ), 在執(zhí)行open(/dev/LEDS,O_RDWR)時(shí)就會(huì)根據(jù)它的屬性調(diào)用 相應(yīng)的驅(qū)動(dòng)程序, write 可以直接看作 myled_write 的抽象,在執(zhí)行 write 函數(shù)時(shí)則可以通過 myled_write 函數(shù)里面的 copy_from_user 函數(shù)把從應(yīng)用程序獲得的數(shù)據(jù)傳遞到驅(qū)動(dòng)程序所在的內(nèi)核空間(驅(qū)動(dòng)程序是加載到內(nèi)核),簡(jiǎn)而言之就是把 write 的參數(shù)轉(zhuǎn)變成myled_led 的參數(shù),把 write 的執(zhí)行變成 myled_led 的執(zhí)行,從而實(shí)現(xiàn)對(duì) led 的控制。 驅(qū)動(dòng) 測(cè)試 PC 主機(jī)上編譯好的 .ko 驅(qū)動(dòng)程序以及測(cè)試程序可以通過多種途徑進(jìn)行測(cè)試??梢酝ㄟ^將驅(qū)動(dòng)程序制作進(jìn)文件系統(tǒng)的方式使驅(qū)動(dòng)程序能運(yùn)行在開發(fā)板 linux 環(huán)境下,但步驟繁多,通過掛載 NFS 網(wǎng)絡(luò)文件系統(tǒng)的方式可以將編譯好的驅(qū)動(dòng)程序以及測(cè)試程序及時(shí)的同步到開發(fā)板,并且不受內(nèi)存容量限制,是開發(fā)者最常用的測(cè)試方式。 使用網(wǎng)絡(luò)文件系統(tǒng)啟動(dòng)可以通過對(duì) uboot 里面啟動(dòng)參數(shù) bootargs 的按照一定格式設(shè)置,指定文件系統(tǒng)類型和需掛載 nfs 的目錄及 ip,內(nèi)核文檔 里面詳細(xì)敘述了實(shí)現(xiàn)步驟, ip 的設(shè)置格式如下: ip=客戶端 ip:服務(wù)器 ip:網(wǎng)關(guān) ip:子網(wǎng)掩碼 :主機(jī)名 :設(shè)備名 :自動(dòng)配置 :網(wǎng)卡 0:網(wǎng)卡 1 root=/dev/nfs nfsroot=:/work/nfs_root/fs_new_box ip=:::::eth0:off 設(shè)置好開發(fā)板從網(wǎng)絡(luò)文件系統(tǒng)啟動(dòng)后,重啟即可進(jìn)行對(duì)驅(qū)動(dòng)程序的測(cè)試。 24 在開發(fā)板上執(zhí)行 insmod 裝載驅(qū)動(dòng)程序 cat /proc/devices 或 ls l /dev/可以查看當(dāng)前已經(jīng)裝載的設(shè)備驅(qū)動(dòng)信息 rmmod 卸載驅(qū)動(dòng)程序 ./myleds 輸入子系統(tǒng)驅(qū)動(dòng)程序 圖 53 輸入子系統(tǒng)驅(qū)動(dòng)框架 Figure53 Input subsystem drivers framework Linux 輸入子系統(tǒng)設(shè)備驅(qū)動(dòng)框架如圖 53 所示,裝載過程和字符設(shè)備驅(qū)動(dòng)程序一致:分配、設(shè)置、注冊(cè) 。 輸入子系統(tǒng)驅(qū)動(dòng)中對(duì)于輸入事件類型的設(shè)置應(yīng)該為開發(fā)者首先考慮, 它告知 內(nèi)核輸入設(shè)備 支持的輸入類型 。當(dāng)輸入事件發(fā)生 時(shí) ,通常使用中斷方式觸發(fā)事件,以降低 CPU 負(fù)荷 ,需要將輸入事件上報(bào)給內(nèi)核處理,input_sync 函數(shù)則用于告知內(nèi)核本次輸入事件已經(jīng)完
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1