日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

入門:Linux 2.6 內(nèi)核的嵌入式系統(tǒng)應(yīng)用( 二 )


1.3 同步原型與共享內(nèi)存
多進(jìn)程應(yīng)用程序需要共享內(nèi)存和外設(shè)資源,為避免競(jìng)爭(zhēng)采用了互斥的方法保證資源在同一時(shí)刻只被一個(gè)任務(wù)訪問 。Linux內(nèi)核用一個(gè)系統(tǒng)調(diào)用來決定一個(gè)線程阻塞或是繼續(xù)執(zhí)行來實(shí)現(xiàn)互斥,在線程繼續(xù)執(zhí)行時(shí),這個(gè)費(fèi)時(shí)的系統(tǒng)調(diào)用就沒有必要了 。Linux2.6所支持的Fast User-Space Mutexes 可以從用戶空間檢測(cè)是不是需要阻塞線程,只在需要時(shí)執(zhí)行系統(tǒng)調(diào)用終止線程 。它同樣采用調(diào)度優(yōu)先級(jí)來確定將要執(zhí)行的進(jìn)程[4] 。多處理器嵌入式系統(tǒng)各處理器之間需要共享內(nèi)存,對(duì)稱多處理技術(shù)對(duì)內(nèi)存訪問采用同等優(yōu)先級(jí),在很大程度上限制了系統(tǒng)的可量測(cè)性和處理效率 。Linux2.6則提供了新的管理方法——NUMA(Non Uniform Memory Access) 。NUMA根據(jù)處理器和內(nèi)存的拓?fù)洳季?在發(fā)生內(nèi)存競(jìng)爭(zhēng)時(shí),給予不同處理器不同級(jí)別權(quán)限以解決內(nèi)存搶占瓶頸,提高吞吐量 。
1.4 POSIX線程及NPTL
新的線程模型基于一個(gè)1:1的線程模型(一個(gè)內(nèi)核線程對(duì)應(yīng)一個(gè)用戶線程),包括內(nèi)核對(duì)新的 NPTL(Native POSIX Threading Library)的支持,這是對(duì)以前內(nèi)核線程方法的明顯改進(jìn) 。2.6內(nèi)核同時(shí)還提供POSIX signals和POSIX high-resolution timers 。POSIX signals不會(huì)丟失,并且可以攜帶線程間或處理器間的通信信息 。嵌入式系統(tǒng)要求系統(tǒng)按時(shí)間表執(zhí)行任務(wù),POSIX timer可以提供1kHz的觸發(fā)器使這一切變得簡(jiǎn)單,從而可以有效地控制進(jìn)度 。
1.5 微控制器的支持
Linux2.6內(nèi)核加入了多種微控制器的支持 。無MMU的處理器以前只能利用一些改進(jìn)的分支版本,如uClinux,而2.6內(nèi)核已經(jīng)將其整合進(jìn)了新的內(nèi)核中,開始支持多種流行的無MMU微控制器,如Dragonball、ColdFire、Hitachi H8/300 。Linux在無MMU控制器上仍舊支持多任務(wù)處理,但沒有內(nèi)存保護(hù)功能 。同時(shí)也加入了許多流行的控制器的支持,如S3C2410等 。
1.6 面向應(yīng)用
嵌入式應(yīng)用有用戶定制的特點(diǎn),硬件設(shè)計(jì)都針對(duì)特定應(yīng)用開發(fā),這給系統(tǒng)帶來對(duì)非標(biāo)準(zhǔn)化設(shè)計(jì)支持的問題(如IRQ的管理) 。為了更好地實(shí)現(xiàn),可以采用部件化的操作系統(tǒng) 。Linux2.6采用的子系統(tǒng)架構(gòu)將功能模塊化,可以定制而對(duì)其他部分影響最小 。同時(shí)Linux2.6提供了多種新技術(shù)的支持以實(shí)現(xiàn)各種應(yīng)用開發(fā),如Advanced Linux Sound Architecture(ALSA)和Video4Linux等,對(duì)多媒體信息處理更加方便;對(duì)USB2.0的支持,提供更高速的傳輸,增加藍(lán)牙無線接口、音頻數(shù)據(jù)鏈接和面向鏈接的數(shù)據(jù)傳輸L2CAP,滿足短距離的無線連接的需要;而且在2.6內(nèi)核中還可以配置成無輸入和顯示的純粹無用戶接口系統(tǒng) 。
2、應(yīng)用研究
在S3C2410開發(fā)板上移植嵌入式Linux 2.6.11.7內(nèi)核系統(tǒng),應(yīng)用于構(gòu)建H.264多媒體系統(tǒng) 。
2.1 建立交叉編譯環(huán)境
在RedHat9的主機(jī)上進(jìn)行內(nèi)核移植開發(fā),首先需要建立交叉編譯環(huán)境 。由于2.6內(nèi)核中采用了一些新的特性和指令,需要采用較新的工具集,采用binutils-2.15、gcc-3.4.2、glibc-2.2.5、linux-2.6.8、glibc-linuxthreads-2.2.5來建立交叉編譯工具鏈,建立之后將工具鏈路徑加入系統(tǒng)路徑$PATH中 。
2.2 內(nèi)核修改
Linux 2.6.11.7內(nèi)核加入了對(duì)S3C2410芯片的支持,不再需要任何補(bǔ)丁文件 。修改內(nèi)核源碼中Makefile的交叉編譯選項(xiàng)ARCH=arm,CROSS_COMPILE=arm-linux- 。針對(duì)硬件配置,需要在arch/arm/mach-s3c2410/devs.c或者smdk2410.c中添加FLASH的分區(qū)信息s3c_nand_info,如表1 。
表1 NAND FLASH分區(qū)表
分區(qū)名 起始地址 大 小
Vivi 0x00000000 0x00020000
Param 0x00020000 0x00010000
Kernel 0x00030000 0x001c0000
Root 0x00200000 0x00200000
Usr 0x00400000 0x03c00000
然后在s3c_device_nand中增加.dev={.platform_data= https://www.rkxy.com.cn/dnjc/&s3c_nand_info},在arch/arm/mach-s3c2410/mach-smdk2410.c中的__initdata部分增加&s3c_device_nand,使內(nèi)核在啟動(dòng)時(shí)初始化NAND FLASH信息 。

推薦閱讀