久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

ubuntu16.04下linux內(nèi)核編譯升級(jí)更新以及設(shè)備驅(qū)動(dòng)程序的編寫

 印度阿三17 2021-01-05

最近學(xué)院里的nfc老師要我們做個(gè)設(shè)備驅(qū)動(dòng),之前從沒接手過這個(gè)東西,,加上老師給的材料錯(cuò)誤也是一大堆,搞了差不多一個(gè)星期才搞出來,。特此寫一個(gè)博客,,以免后來人和我一樣跳坑。

總體考慮

要去寫設(shè)備驅(qū)動(dòng)程序,說白了就三大步驟:下載內(nèi)核源碼構(gòu)建內(nèi)核源碼樹(也就是下載你的目的內(nèi)核源碼包并解壓就行了),、編譯內(nèi)核(這樣才能讓操作系統(tǒng)感知自己寫的驅(qū)動(dòng)程序),、寫代碼(編寫內(nèi)核程序并編譯測(cè)試)。這三步哪一步都很艱難,。

我是在自己筆記本上用虛擬機(jī)VMware裝的ubuntu操作系統(tǒng),,相比于裝雙系統(tǒng)有一大缺點(diǎn)和一大優(yōu)點(diǎn),優(yōu)點(diǎn)是將編譯好的新內(nèi)核裝入操作系統(tǒng)時(shí)不用擔(dān)心系統(tǒng)崩潰,,缺點(diǎn)是裝虛擬機(jī)的時(shí)候沒考慮周全,,搞得虛擬機(jī)的硬盤太小了,估計(jì)容量不夠用,。

那么綜合考慮之后,,對(duì)于我來說是四大步驟:1、給虛擬機(jī)擴(kuò)容,;2,、下載內(nèi)核源碼構(gòu)建內(nèi)核源碼樹;3,、編譯內(nèi)核,;4、寫代碼,。

下面來一一介紹:

1,、虛擬機(jī)擴(kuò)容

(1)虛擬機(jī)邏輯擴(kuò)盤。僅僅在這一步擴(kuò)盤是完全不夠的,!還要在虛擬機(jī)內(nèi)部設(shè)置掛載,,不然的話虛擬機(jī)無法感知到你擴(kuò)展的硬盤。這相當(dāng)于你給一臺(tái)實(shí)際的臺(tái)式電腦加了一塊新硬盤后,,還要在操作系統(tǒng)內(nèi)進(jìn)行設(shè)置,。我在這里是擴(kuò)成80GB。

 

(2)在終端使用命令

sudo apt-get install Gparted

下載Gparted部件,。

(3)打開Gparted:

(4)打開Gparted應(yīng)用,,你可以看到已分配分區(qū)狀況和新增未分配的分區(qū) :

(5)然后依次刪除/dev/sda5和/dev/sda2,刪除后,,就會(huì)剩下/dev/sda1(14GB)和未分配的(15GB),,不然的話你怎么都無法將unallocated部分掛載。

(6)接下來重新調(diào)整/dev/sda1的大小,,我這里調(diào)整為75529MiB(73.76GB),,然后剩下6.24GB作為linux_swap,重新將未分配的6.24GB格式化,,先new出一個(gè)extended的分區(qū),,然后再在這個(gè)extended的分區(qū)里new一個(gè)邏輯分區(qū),并且file system選擇為linux-swap,最后選擇綠色的鉤鉤,,完成保存,。最后執(zhí)行完后,如下圖所示:

(7)這樣我就把虛擬機(jī)的硬盤擴(kuò)成了80GB,,編譯內(nèi)核源碼絕對(duì)是綽綽有余的了,。

(注:本小節(jié)參考了博客:http://blog.csdn.net/Timsley/article/details/50742755

2、構(gòu)建內(nèi)核源碼樹

(1)我的虛擬機(jī)的操作系統(tǒng)是ubuntu16.04,。我是在這里下載的源碼包:https://www./pub/linux/kernel/v4.x/,,我下載的源碼包是linux-4.10.14.tar.xz

附:大家千萬不要在非www.開頭的網(wǎng)站上隨意下載內(nèi)核源碼!

(2)下載完之后解壓即可:

 

3,、編譯內(nèi)核

(1)安裝基本的工具軟件,。

逐次在終端執(zhí)行以下四條命令:

復(fù)制代碼

sudo apt-get install libncurses5-dev libssl-dev 

sudo apt-get install build-essential openssl 

sudo apt-get install zlibc minizip 

sudo apt-get install libidn11-dev libidn11

復(fù)制代碼

(2)在終端進(jìn)入你的解壓的內(nèi)核源碼的目錄,比如我內(nèi)核源碼解壓后在home/expr/expr4/linux-4.10.14,,那么進(jìn)入終端后就是:

(3)依次執(zhí)行以下三條命令:

sudo make mrproper 

sudo make clean 

sudo make menuconfig

其中mrproper為清除編譯過程中產(chǎn)生的所有中間文件,,clean為清除上一次產(chǎn)生的編譯中間文件,在menuconfig中出現(xiàn)選擇的圖形化界面后,直接按右方向鍵選擇到exit退出,,退出提示中選擇保存,,實(shí)現(xiàn)內(nèi)核的默認(rèn)配置

(4)執(zhí)行命令:

sudo make –j8

因?yàn)槲业墓P記本cpu是i7四核八線程,,所以我直接用8個(gè)線程并行編譯,,這樣編譯速度就是普通的make命令的8倍。最近雙一流建設(shè)學(xué)校發(fā)了財(cái)換了一大批新電腦,,所以在我學(xué)校的高性能計(jì)算實(shí)驗(yàn)室編譯內(nèi)核,,因?yàn)樘幚砥魇切沦I的intel  core  i7  6700k,8線程編譯的話20分鐘就搞定了,,普通筆記本應(yīng)該要1~2小時(shí),。

下面放一波編譯的時(shí)候截的圖:

正在編譯內(nèi)核

編譯的時(shí)候監(jiān)測(cè)筆記本狀態(tài),怕內(nèi)存泄漏

(5)依次執(zhí)行命令:

sudo make modules_install        //安裝內(nèi)核模塊

sudo make install      //安裝內(nèi)核

下面放一波編譯的時(shí)候截的圖:

 

正在執(zhí)行sudo make modules_install

正在執(zhí)行sudo make modules_install

正在執(zhí)行sudo make install

新內(nèi)核成功嵌入操作系統(tǒng)

(6)重新啟動(dòng)系統(tǒng),,如果是虛擬機(jī)的話記得重啟進(jìn)入BIOS界面之前一定要點(diǎn)擊鼠標(biāo)進(jìn)入虛擬機(jī)的界面實(shí)現(xiàn)鍵盤捕獲。在重啟開機(jī)界面按住shift鍵不放手,,選擇高級(jí)選項(xiàng),,進(jìn)入內(nèi)核選擇加載界面,選擇自己編譯的內(nèi)核的正常模式:

 

進(jìn)入內(nèi)核選擇模式,,選擇自己編譯的內(nèi)核:

 

(7)至此,,工作完成了50%。隨著操作系統(tǒng)的啟動(dòng),,我新編譯的內(nèi)核也正式誕生了,!

(注:本小節(jié)參考了博客:http://blog.csdn.net/Xiaobai__Lee/article/details/72048829

4、寫自己的設(shè)備驅(qū)動(dòng)程序

(1)寫在前面:

在編程的時(shí)候,不要輕易復(fù)制任何網(wǎng)站的代碼,,99.99%都是跑不通的,。Makefile文件尤其不要隨便在網(wǎng)上下載,因?yàn)檫@個(gè)東西對(duì)格式要求非常高,,新手隨便在網(wǎng)上下的Makefile文件也是99.99%都是跑不通,。要跑通,有兩個(gè)關(guān)鍵:1,、認(rèn)真分析每一條源代碼,;2、有問題,,多去搜一下看看,。

(2)我在ubuntu下編寫的代碼如下:

源代碼材料包托管在github上:https://wnm1503303791./interesting-work/blog/code.zip

有需要的朋友自取 

(3)要在內(nèi)核態(tài)下編譯我們寫好的設(shè)備驅(qū)動(dòng)程序源碼,必須使用Makefile文件,。

Makefile文件內(nèi)容截圖,,每個(gè)關(guān)鍵字都出現(xiàn)彩色的時(shí)候說明基本上沒寫錯(cuò)

(4)在終端下進(jìn)入設(shè)備驅(qū)動(dòng)程序源碼所在的文件夾,例如,,我的源碼放在home/expr/expr4/expr4/code/,,那么就是這樣:

 

(5)輸入make命令,之后在文件夾下直接生成.ko文件:

 

(6)繼續(xù)在終端下輸入命令:sudo insmod globalmem.ko將剛剛生成的globalmem.ko文件加載進(jìn)入內(nèi)核,。

(7)用命令lsmod查看是否加載成功,,如果成功就是這樣:

 

可以看到第一個(gè)module就是我剛剛生成的globalmem。

(8)到這里工作完成了85%,??梢韵炔患敝憸y(cè)試程序,可以先用原語測(cè)試一下驅(qū)動(dòng),,因?yàn)槲业倪@個(gè)驅(qū)動(dòng)是處理字符的驅(qū)動(dòng)程序,,所以我是這樣測(cè)試的:

 

也就是進(jìn)入root模式后用原語將字符串“tz”送入驅(qū)動(dòng),驅(qū)動(dòng)就會(huì)輸出“tz”,。

(9)現(xiàn)在就可以踏踏實(shí)實(shí)地去寫測(cè)試程序了:

 

(10)編譯這個(gè)C程序,,并運(yùn)行:

 

測(cè)試程序運(yùn)行正常,表明設(shè)備驅(qū)動(dòng)運(yùn)行正常,。

至此,,我的教程就結(jié)束了。有疑問的朋友可以直接在評(píng)論區(qū)留言,,非常希望和各位朋友一起討論,!

TZ@華中農(nóng)業(yè)大學(xué)信息學(xué)院高性能計(jì)算實(shí)驗(yàn)室

2017/12/12夜

Last updated @ 2020/6/21

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多