色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式Linux模塊編譯步驟詳細(xì)概述讓你少走彎路

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:易水寒 ? 2018-08-12 10:56 ? 次閱讀

今天將直接了當(dāng)?shù)膸氵M(jìn)入linux的模塊編譯,當(dāng)然在介紹的過程當(dāng)中,我也會添加一些必要的注釋,以便初學(xué)者能夠看懂。之所以要有這篇文章,主要是因為從書本上學(xué)的話,可能要花更長的時間才能學(xué)會整個過程,因為看書的話是一個學(xué)習(xí)過程,而本文更像是一個培訓(xùn)。所以實踐性和總結(jié)性更強(qiáng)。讀完本文后你將會學(xué)到編譯一個模塊和模塊makefile的基本知識。以及加載(卸載)模塊,查看系統(tǒng)消息的一些知識。如果你已經(jīng)是一個linux模塊編譯高手,您也可以指點指點哪里說的不足。

第一步:準(zhǔn)備源代碼

首先我們還是要來編寫一個符合linux格式的模塊文件,這樣我們才能開始我們的模塊編譯。假設(shè)我們有一個源文件mymod.c。它的源碼如下:

mymod.c

1. #include /* 引入與模塊相關(guān)的宏 */

2. #include /* 引入module_init() module_exit()函數(shù) */

3. #include /* 引入module_param() */

4

5. MODULE_AUTHOR("Yu Qiang");

6. MODULE_LICENSE("GPL");

7

8. static int nbr = 10;

9. module_param(nbr, int, S_IRUGO);

10.

11. static int __init yuer_init(void)

12.{

13. int i;

14. for(i=0; i

15. {

16. printk(KERN_ALERT "Hello, How are you. %d ", i);

17. }

18. return 0;

19.}

20.

21.static void __exit yuer_exit(void)

22.{

23. printk(KERN_ALERT"I come from yuer's module, I have been unlad. ");

24.}

25.

26. module_init(yuer_init);

27. module_exit(yuer_exit);

我們的源文件就準(zhǔn)備的差不多了,這就是一個linux下的模塊的基本結(jié)構(gòu)。第9行是導(dǎo)出我們的符號變量nbr。這樣在你加載這個模塊的時候可以動態(tài)修改這個變量的值。稍后將演示。yuer_init()函數(shù)將在模塊加載的時候運行,通過輸出的結(jié)果可以看到我們的模塊是否加載成功。

第二步:編寫Makefile文件

首先還是來看看我們Makefile的源文件,然后我們再來解釋;

Makefile

obj-m := modules.o #要生成的模塊名

modules-objs:= mymod.o #生成這個模塊名所需要的目標(biāo)文件

KDIR := /lib/modules/`uname -r`/build

PWD := $(shell pwd)

default:

make -C $(KDIR) M=$(PWD) modules

clean:

rm -rf *.o .* .cmd *.ko *.mod.c .tmp_versions

現(xiàn)在我來說明一下這個Makefile。請記住是大寫的Makefile而不是小寫的makefile;

obj-m :這個變量是指定你要聲稱哪些模塊模塊的格式為 obj-m := <模塊名>.o

modules-objs :這個變量是說明聲稱模塊modules需要的目標(biāo)文件 格式要求 <模塊名>-objs := <目標(biāo)文件>

切記:模塊的名字不能取與目標(biāo)文件相同的名字。如在這里模塊名不能取成 mymod;

KDIR :這是我們正在運行的操作系統(tǒng)內(nèi)核編譯目錄。也就是編譯模塊需要的環(huán)境

M= :指定我們源文件的位置

PWD :這是當(dāng)前工作路徑$(shell )是make的一個內(nèi)置函數(shù)。用來執(zhí)行shell命令。

第三步:編譯模塊

現(xiàn)在我們已經(jīng)準(zhǔn)備好了我們所需要的源文件和相應(yīng)的Makefile。我們現(xiàn)在就可以編譯了。在終端進(jìn)入源文件目錄輸入make

運行結(jié)果:

make[1]: Entering directory `/usr/src/linux-headers-2.6.24-24-generic'

CC [M] /home/yuqiang/桌面/mymodule/mymodules.o

LD [M] /home/yuqiang/桌面/mymodule/modules.o

Building modules, stage 2.

MODPOST 1 modules

CC /home/yuqiang/桌面/mymodule/modules.mod.o

LD [M] /home/yuqiang/桌面/mymodule/modules.ko

make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-24-generic'

第四步:加載/卸載我們的模塊

從上面的編譯中我可以看到。已經(jīng)有一個modules.ko生成了。這就是我們的模塊了。現(xiàn)在我們就可以來加載了。

首先在終端輸入:sudo insmod modules.ko

現(xiàn)在我們來看看我們的模塊加載成功沒有呢?

在終端輸入:dmesg | tail -12 這是查看內(nèi)核輸出信息的意思。tail -12 顯示最后12條;

顯示結(jié)果如下:

[17945.024417] sd 9:0:0:0: Attached scsi generic sg2 type 0

[18046.790019] usb 5-8: USB disconnect, address 9

[19934.224812] Hello, How are you. 0

[19934.224817] Hello, How are you. 1

[19934.224818] Hello, How are you. 2

[19934.224820] Hello, How are you. 3

[19934.224821] Hello, How are you. 4

[19934.224822] Hello, How are you. 5

[19934.224824] Hello, How are you. 6

[19934.224825] Hello, How are you. 7

[19934.224826] Hello, How are you. 8

[19934.224828] Hello, How are you. 9

看到了吧。我們的模塊的初始化函數(shù)yuer_init();已經(jīng)成功運行了。說明我們的模塊已經(jīng)加載成功;

現(xiàn)在我們再來卸載模塊試試看。

在終端輸入:sudo rmmod modules

在終端輸入:dmesg | tail -3

[19934.224826] Hello, How are you. 8

[19934.224828] Hello, How are you. 9

[20412.046932] I come from yuer's module, I have been unlad.

可以從打印的信息中看到,我們的模塊的退出函數(shù)已經(jīng)被執(zhí)行了。說明我們的模塊已經(jīng)被成功的卸載了。到目前位置我們就已經(jīng)算是對模塊的編譯到編譯運行算是有了一個整體上的認(rèn)識了。對于以后深入的學(xué)習(xí)還是應(yīng)該有點幫助的。下面我們將在看看于模塊相關(guān)的一些簡單的操作。

第五步:加載模塊時傳遞參數(shù)

在終端輸入:sudo insmod module_name.ko nbr=4

在終端輸入:dmesg | tail -6

顯示結(jié)果如下:

[20800.655694] Hello, How are you. 9

[21318.675593] I come from onefile module, I have been unlad.

[21334.425373] Hello, How are you. 0

[21334.425378] Hello, How are you. 1

[21334.425380] Hello, How are you. 2

[21334.425381] Hello, How are you. 3

這樣我們就可以看到在模塊加載的時候動態(tài)設(shè)置了我們的一個變量。初始化函數(shù)中的循環(huán)只執(zhí)行了4次。

可能你會問我怎么知道一個模塊可以設(shè)置那些變量呢。當(dāng)然,你可以先不設(shè)變量加載一次。然后可以在終端輸入ls /sys/module//parameters/來查看。在這里我們是這樣輸入的

在終端輸入:ls /sys/moedle/modules/parameters/

顯示結(jié)果:

nbr

如果我們的模塊加載成功了。最后我們還可以通過modinfo來查看我們的模塊信息。如下

在終端輸入:sudo modinfo modules.ko

顯示結(jié)果:

filename: modules.ko

license: GPL

author: Yu Qiang

srcversion: 20E9C3C4E02D130E6E92533

depends:

vermagic: 2.6.24-24-generic SMP mod_unload 586

parm: nbr:int

總結(jié):

今天介紹的相關(guān)知識都好像有一點淺嘗轍止的感覺。因為這里主要是通過一條線式方式來講解了模塊編寫的相關(guān)過程,其實在這個過程中還有很多可以發(fā)散的地方。例如:

在寫到MODULE_AUTHOR("Yu Qiang")的時候,你應(yīng)該想到還有

MODULE_DESCRIPTION(模塊用途的簡單描述);

MODULE_VERSION(模塊的版本字符串);

MODULE_ALIAS(模塊的別名);

...

在寫到module_param(nbr, int, S_IRUGO);的時候,你應(yīng)該想到還有

EXPORT_SYMBOL(name); 可以導(dǎo)出模塊的函數(shù),這也是模塊編寫的最終目的

...

在用到insmod 和 modinfo的時候。你應(yīng)該想到還有

depmod 分析可加載模塊的依賴性,并生成modules.dep文件和映射文件

modprobe Linux內(nèi)核添加刪除模塊

...

如果要成為一名專業(yè)的linux模塊開發(fā)人員,還要走很多的路,就看各位的了,祝大家學(xué)習(xí)順利。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5086

    文章

    19140

    瀏覽量

    305846
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11313

    瀏覽量

    209743
  • Makefile
    +關(guān)注

    關(guān)注

    1

    文章

    125

    瀏覽量

    19189

原文標(biāo)題:少走彎路系列!嵌入式Linux 模塊編譯步驟入門

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    <新手求教嵌入式的學(xué)習(xí)路線>

    本人想從事嵌入式開發(fā),但是自己現(xiàn)在只有C、51單片機(jī)、模電、數(shù)電、verilog的功底。現(xiàn)在想學(xué)習(xí)嵌入式,只知道要先從LINUX開始,其他一頭霧水。求過來人給點建議,先學(xué)什么再學(xué)什么,有哪些書,也就是學(xué)習(xí)路線,好
    發(fā)表于 08-15 09:34

    嵌入式工作的前輩帶我,小弟想入行,求前輩帶

    小弟年齡比較大了,現(xiàn)在自學(xué)Linux,和一些基礎(chǔ)的嵌入式知識,學(xué)習(xí)的熱情肯定有的,但是我想找一位從事嵌入式的前輩指導(dǎo)下,不勝感謝,希望指導(dǎo)我可以我在學(xué)習(xí)的道路上
    發(fā)表于 03-01 19:18

    嵌入式系統(tǒng)入門需要哪些器材

    嵌入式系統(tǒng)入門需要哪些器材?球高手推薦,希望少走彎路
    發(fā)表于 11-05 00:46

    少走彎路Linux編程思想轉(zhuǎn)變

    為基于Linux操作系統(tǒng)編程,講這個思想轉(zhuǎn)變的書幾乎沒有,初學(xué)者走了很多彎路,撞了很多難墻。筆者因此寫上自己的學(xué)習(xí)心得,希望能給和我一樣轉(zhuǎn)變做嵌入式
    發(fā)表于 12-30 10:10

    少走彎路系列!嵌入式Linux下 u***驅(qū)動開發(fā)方法

    嵌入式Linux下的u***屬于所有驅(qū)動中相當(dāng)復(fù)雜的一個子系統(tǒng),要想將她徹底征服,至少需要個把月的時間,不信?那是沒做過。本人做過2年的嵌入式驅(qū)動開發(fā),u***占了一大半的時間。期間
    發(fā)表于 04-06 11:15

    快速學(xué)習(xí)C語言的途徑,少走彎路

    `快速學(xué)習(xí)C語言的途徑,少走彎路 標(biāo)準(zhǔn)C語言能干什么? 坦白講,在今天軟件已經(jīng)發(fā)展了半個多世紀(jì),單純的C語言什么都干不了。標(biāo)準(zhǔn)C語言庫只提供了一些通用的邏輯運算方法以及字符串處理,當(dāng)然字符串在C
    發(fā)表于 10-19 10:51

    新人來咯,剛剛學(xué)labview有什么建議少走彎路嗎?

    我剛剛來發(fā)燒友,對這不是很熟,剛剛學(xué)labview,大家有什么建議少走彎路嗎?還有什么辦法賺到更多的幣,不然下載不了東西
    發(fā)表于 03-15 16:30

    少走彎路!分享PCB設(shè)計中的布線經(jīng)驗

    少走彎路!分享PCB設(shè)計中的布線經(jīng)驗。
    發(fā)表于 04-25 09:31

    提高單片機(jī)抗干擾能力,的設(shè)計少走彎路

    如何提高單片機(jī)抗干擾少走彎路 搞過產(chǎn)品的朋友都有體會,一個設(shè)計看似簡單,硬件設(shè)計和代碼編寫很快就搞定,但在調(diào)試過程中卻或多或少的意外,這些都是抗干擾能力不夠的體現(xiàn)。 下面討論一下如何
    發(fā)表于 10-13 22:21 ?990次閱讀

    熱水器安裝有竅門 注意這些事項能讓少走彎路

    熱水器是家庭常備家電之一,不過常聽有人抱怨熱水器沒安裝好,叫人上門安裝還很貴,這熱水器安裝到底有什么講究?今天咱們就一次性來說清楚,大家少走彎路
    發(fā)表于 04-16 17:17 ?1828次閱讀

    STM32嵌入式入門必看之文章給你詳細(xì)的講解

    STM32嵌入式入門必看之文章-----介紹非常詳細(xì)!(學(xué)習(xí)STM32的理由!!!!)為什么要寫這篇文章呢?這是一篇關(guān)于嵌入式入門的文章,因為我在進(jìn)入嵌入式這個領(lǐng)域之前,也是遇到過非常
    發(fā)表于 06-18 16:52 ?20次下載

    嵌入式linux編譯 ko,嵌入式linux:編譯linux驅(qū)動模塊

    嵌入式系統(tǒng)應(yīng)用中,嵌入式linux是非常重要的一個方面,而linux驅(qū)動編譯又是嵌入式
    發(fā)表于 11-01 16:31 ?9次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b><b class='flag-5'>編譯</b> ko,<b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>:<b class='flag-5'>編譯</b><b class='flag-5'>linux</b>驅(qū)動<b class='flag-5'>模塊</b>

    Linux嵌入式Linux系統(tǒng)的移植(上篇:交叉編譯器、連接方式)

    的移植要點搭建交叉開發(fā)環(huán)境bootloader的選擇與移植kernel的設(shè)置、編譯、移植和調(diào)試根文件系統(tǒng)的制作嵌入式Linux系統(tǒng)的移植基本步驟確定目標(biāo)機(jī)、主機(jī)的連接方式安裝交叉
    發(fā)表于 11-01 16:57 ?14次下載
    【<b class='flag-5'>Linux</b>】<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>系統(tǒng)的移植(上篇:交叉<b class='flag-5'>編譯</b>器、連接方式)

    示波器校準(zhǔn)的步驟,熟知10步,少走彎路

    很多人對于示波器校準(zhǔn)還不是很清楚,下面安泰維修專業(yè)從事儀器儀表維修工程師帶大家了解一下關(guān)于示波器校準(zhǔn)的10個具體步驟少走彎路!有需要的朋友可以閱讀全文! 一)測試
    的頭像 發(fā)表于 11-10 17:04 ?3.5w次閱讀
    示波器校準(zhǔn)的<b class='flag-5'>步驟</b>,熟知10步,<b class='flag-5'>讓</b><b class='flag-5'>你</b><b class='flag-5'>少走彎路</b>!

    硬件電路設(shè)計有這么多坑,如何少走彎路?看大牛怎么說

    硬件電路設(shè)計有這么多坑,如何少走彎路?看大牛怎么說
    的頭像 發(fā)表于 11-27 17:34 ?664次閱讀
    主站蜘蛛池模板: 六级黄色片| 久久精品国产午夜伦班片| 亚洲精品久久久无码AV片软件| 欧美亚洲国产免费高清视频| 久久精品日本免费线| 狠狠色狠狠色狠狠五月ady| 国产婷婷午夜精品无码A片| 国产成人精品系列在线观看| 爱啪国产精品视频在线| 99久久国产综合精品成人影院| 最新国产精品福利2020| 在线自拍综合亚洲欧美| 中国农村妇女真实BBWBBWBBW| 樱花草动漫www| 在线观看成年人免费视频| 在线观看99| 97色伦图片97色伦图影院久久| 最近日本免费观看MV免费| 2018国产天天弄谢| 4399日本电影完整版在线观看免费| 中文天堂www资源| 777黄色片| 99久久网站| lesbabes性欧美| 大胸美女被cao哭| 国产成人免费视频| 国产偷国产偷亚州清高APP| 好硬好湿好爽再深一点视频| 精品无码国产自产在线观看| 九九免费的视频| 老头狠狠挺进小莹体内视频| 免费a毛片| 日本片bbbxxx| 午夜视频在线观看国产| 亚州视频一区| 影音先锋av电影| 99久久免费精品国产| 俄罗斯19girl video9| 国产精品麻豆a啊在线观看| 韩国电影久久| 麻豆文化传媒一区二区|