Hello, world!/n");。內核中共提供了八種不同的日志級別,在 linux/kernel.h 中有相應的宏對應。" />

在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux內核模塊介紹,使用Linux模塊的優點

嵌入式單片機 ? 來源:未知 ? 作者:李倩 ? 2018-03-30 15:53 ? 次閱讀

1.1Linux內核模塊介紹1.1.1Linux內核模塊概述

嵌入式設備驅動開發中將驅動程序以模塊的形式發布,更是極大地提高了設備使用的靈活性——用戶只需要拿到相關驅動模塊,再插入到用戶的內核中,即可靈活地使用你的設備。

1.1.2使用Linux模塊的優點

1. 用戶可以隨時擴展Linux系統的功能。

2. 當要修改當前Linux系統的驅動時,只需要卸載舊模塊,編譯目標驅動模塊,重新安裝插入即可。

3. 系統中如果需要使用新模塊,不必重新編譯內核,只要插入相應的模塊即可。

4. 減小Linux內核的體積,節省flash。

1.2Linux模塊入門1.2.1模塊相關命令1.2.1.1 Linux模塊命令詳細介紹

1. 模塊安裝命令:insmod

insmod xxxx.ko

2. 查看當前已經安裝模塊:lsmod

lsmod 不需要參數

3. 模塊卸載命令:rmmod

rmmod xxxxx.ko

4. 查看模塊信息:modinfo

在X86上操作:

[root@zhifachen linux-3.5]# modinfo/root/work/rootfs/home/mod/tiny4412_hello_module.ko

filename: /root/work/rootfs/home/mod/tiny4412_hello_module.ko

license: GPL

depends:

intree: Y

vermagic: 3.5.0-FriendlyARM SMP preempt mod_unload ARMv7 p2v8

[root@zhifachen linux-3.5]#

1.2.1.2 Linux模塊命令測試示例

注意:模塊的編譯是依賴具體一份源碼,并且這份被編譯過,并且沒有使用mrproper,distclean清除的源碼工程。

1.2.2使用makemodules編譯內核源碼樹中的模塊

1. 添加內核菜單

2. make menuconfig 配置為 M

3. 在頂層目錄終端輸入makemodules

直接make 也可生成模塊文件(.ko),也會生成zImage,當你只想編譯模塊而不想編譯zImage時候使用 make modules 命令會更加快速。

1.2.3把內核源碼樹中模塊源文件編譯到內核映像中

如果不需要配置菜單只想編譯代碼到內核zImage,Makefile可以這樣寫obj-y += xxxx.o

如果不需要配置菜單只想編譯代碼為外部模塊,Makefile可以這樣寫 obj-m+= xxxx.o

1.2.4在內核源碼中添加自定義的模塊并且編譯1.2.5外部獨立Makefile編譯模塊

在驅動開發階段,接觸到新驅動機率非常高,如果都要去修改內核源碼Makefile, 太過于繁雜,也不利于移植,實際開發中會使用另外一種方法來編譯模塊文件。

1.2.5.1 Linux內核模塊代碼文件模板

可以直接復制內核源碼中自帶的示例模板來測試:drivers/char/tiny4412_hello_module.c

1.2.5.2 Linux內核模塊編譯Makefile模板

編譯模塊Makefile文件:

obj-m += xyd_hello_module.o
all:
@make -C /root/work/linux-3.5/ M=$(PWD) modules
@rm -rf *.o *.mod.c modules.order Module.symvers *~ *.bak
clean:
@rm -rf *.o *.mod.c modules.order Module.symvers *.ko *~ *.bak

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

M=選項讓該Makefile在構造modules目標之前返回到模塊源代碼目錄,然后modules目標指向obj-m變量中設定的模塊;在上面的例子中,我們將該變量設置成了module.o。

上面的清除規則是自己寫的,也可利用內核Makefile清除規則來清編譯生成目標文件,改進后代碼:

obj-m += xyd_hello_module.o
# x86 編譯時候使用: uname -r 得到當前內核的版本號
#KDIR := /lib/modules/`uname -r`/build
#arm 編譯時候使用
KDIR :=/root/work/linux-3.5
all:
@make -C $(KDIR) M=$(PWD) modules
clean:
@make -C $(KDIR) M=$(PWD) modules clean
@rm -f *.ko.unsigned *~

1.1.1Linux內核printk函數

內核中不能使用printf函數輸出信息,要使用printk函數,這個函數有輸出等級控制的。

內核通過 printk() 輸出的信息具有日志級別,日志級別是通過在 printk() 輸出的字符串前加一個帶尖括號的整數來控制的,如 printk("<6>Hello, world!/n");。內核中共提供了八種不同的日志級別,在 linux/kernel.h 中有相應的宏對應。

#defineKERN_EMERG "<0>" /* system is unusable 系統不可用*/

#defineKERN_ALERT "<1>" /* action must be takenimmediately警報,必須立即采取行動*/

#define KERN_CRIT "<2>" /*critical conditions臨界狀態 */

#defineKERN_ERR "<3>" /* error conditions 錯誤狀態*/

#defineKERN_WARNING "<4>" /* warningconditions警告狀態*/

#defineKERN_NOTICE "<5>" /* normal but significant正常的,但引人注目*/

#define KERN_INFO "<6>" /*informational 信息*/

#defineKERN_DEBUG "<7>" /* debug-level messages調試等級信息 */

可以通過查看/proc/sys/kernel/printk文件內容知道設置信息。

[root@ChenZhiFa/]# cat /proc/sys/kernel/printk

7 4 1 7

可以通過echo命令修改種個等級:

[root@ChenZhiFa/]# echo 4 4 1 7 > /proc/sys/kernel/printk

說明:直接使用printk( “kkkk”);這樣沒有指明等級,這種未明確指定。

只有等級比較當前終端等級高才會在終端上顯示出來。

以下進行X86 系統上的測試(在純字符界面下測試有效,在圖形界面中是無效)

在圖形界面系統中按Ctl + Alt + F2(F2~F6鍵其中一個,不同電腦可能不同),可以進入到純字符界面,要返回按Ctl +Alt + F1(不同電腦可能不同)

printk --- 不支持浮點數,實際上驅動程序也不支持浮點運算。所有浮點運算應該放在用戶空間。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2735

    瀏覽量

    47750
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210399

原文標題:1.1 Linux內核模塊介紹1.1.1 Linux內核模塊概述

文章出處:【微信號:qrsworld,微信公眾號:嵌入式單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    linux 了解內核模塊的原理 《Rice linux 學習開發》

    內核模塊是一種沒有經過鏈接,不能獨立運行的目標文件,是在內核空間中運行的程序。
    的頭像 發表于 07-16 10:08 ?4718次閱讀
    <b class='flag-5'>linux</b> 了解<b class='flag-5'>內核模塊</b>的原理 《Rice <b class='flag-5'>linux</b> 學習開發》

    Linux 內核模塊工作原理及內核模塊編譯案例

    一個內核模塊至少包含兩個函數,模塊被加載時執行的初始化函數init_module()和模塊被卸載時執行的結束函數cleanup_module()。
    發表于 09-23 09:39 ?2542次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>內核模塊</b>工作原理及<b class='flag-5'>內核模塊</b>編譯案例

    詳解Linux內核模塊的編寫方法

    Linux 系統為應用程序提供了功能強大且容易擴展的 API,但在某些情況下,這還遠遠不夠。與硬件交互或進行需要訪問系統中特權信息的操作時,就需要一個內核模塊
    的頭像 發表于 05-11 08:55 ?3777次閱讀

    Linux內核模塊間通訊方法

    Linux內核模塊間通訊方法非常的多,最便捷的方法莫過于函數或變量符號導出,然后直接調用。默認情況下,模塊模塊之間、模塊
    發表于 06-07 16:23 ?2661次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核模塊</b>間通訊方法

    RZ/G2L Linux系統如何添加新的內核模塊

    RZ/G2L Linux系統的鏡像基于yocto構建,本篇介紹如何添加新的內核模塊
    的頭像 發表于 01-04 12:19 ?1858次閱讀
    RZ/G2L <b class='flag-5'>Linux</b>系統如何添加新的<b class='flag-5'>內核模塊</b>

    Linux內核模塊程序結構

    Linux設備驅動會以內核模塊的形式出現,因此,學會編寫Linux內核模塊編程是學習Linux設備驅動的先決條件。一個
    發表于 05-27 09:36

    Linux內核模塊簡介

    Linux內核模塊簡介http://bbs.edu118.com/forum.php?mod=viewthread&tid=388&fromuid=204(出處: 信盈達IT技術社
    發表于 08-22 09:22

    高效學習Linux內核——內核模塊編譯

    內核是世界上最大的開源項目之一,但是內核是什么,它用于什么?一、什么是linux內核模塊內核是與計算機硬件接口的易替換軟件的最低級別。它負
    發表于 09-24 09:11

    Linux設備驅動開發詳解》第4章、Linux內核模塊

    Linux設備驅動開發詳解》第4章、Linux內核模塊
    發表于 10-27 14:15 ?0次下載
    《<b class='flag-5'>Linux</b>設備驅動開發詳解》第4章、<b class='flag-5'>Linux</b><b class='flag-5'>內核模塊</b>

    什么是內核模塊?如何編寫一個簡單的模塊

    內核模塊Linux內核向外部提供的一個插口,其全稱為動態可加載內核模塊(Loadable Kernel Module,LKM),我們簡稱為模塊
    發表于 08-24 17:15 ?20次下載

    什么是 Linux 內核模塊?

    lsmod 命令能夠告訴你當前系統上加載了哪些內核模塊,以及關于使用它們的一些有趣的細節。
    的頭像 發表于 08-09 17:01 ?3289次閱讀

    嵌入式LINUX系統內核內核模塊調試教程

    本文檔的主要內容詳細介紹的是嵌入式LINUX系統內核內核模塊調試教程。
    發表于 11-06 17:32 ?21次下載
    嵌入式<b class='flag-5'>LINUX</b>系統<b class='flag-5'>內核</b>和<b class='flag-5'>內核模塊</b>調試教程

    如何在Petalinux創建Linux內核模塊

    --enable”,能創建Linux內核模塊,包括c源代碼文件,Makefile,Yocto的bb文件。相關文件放在目錄“ project-spec / meta-user / recipes-modules”中
    的頭像 發表于 03-02 11:10 ?4439次閱讀

    嵌入式LINUX系統內核內核模塊調試

    嵌入式LINUX系統內核內核模塊調試(嵌入式開發和硬件開發)-嵌入式LINUX系統內核內核模塊
    發表于 07-30 13:55 ?10次下載
    嵌入式<b class='flag-5'>LINUX</b>系統<b class='flag-5'>內核</b>和<b class='flag-5'>內核模塊</b>調試

    Linux內核模塊參數傳遞與sysfs文件系統

    函數傳參的內核傳參機制,編寫內核程序時只要實現傳參接口,用戶在加載內核模塊時即可傳入指定參數,使得內核模塊更加靈活。
    發表于 06-07 16:23 ?2193次閱讀
    主站蜘蛛池模板: 天堂中文在线资源库用 | 欧美特黄一免在线观看 | 海外毛片| 香蕉视频黄色在线观看 | 久久精品福利 | 日韩一级特黄 | 午夜看片影院在线观看 | 一区视频在线播放 | 在线免费视频一区二区 | 欧美 亚洲 国产 丝袜 在线 | 毛片色毛片18毛片美女 | 在线高清国产 | 色福利网 | 亚洲高清美女一区二区三区 | 四虎永久免费影院在线 | 午夜国产精品理论片久久影院 | 欧美系列在线播放 | 欧美xxx另类| 起碰成人免费公开网视频 | 亚洲天堂免费看 | 日本国产中文字幕 | 欧亚色视频 | 国内一级特黄女人精品片 | 午夜片在线观看 | 一丝不遮视频免费观看 | 五月激情五月婷婷 | 精品女同同性视频很黄很色 | 色偷偷成人 | 精品视频在线观看视频免费视频 | 国内精品久久久久影院薰衣草 | 在线欧美视频免费观看国产 | 日韩卡1卡2卡三卡四卡二卡免 | 奇米影视久久 | 天天插视频 | 22sihu国产精品视频影视资讯 | 午夜湿影院 | 五月婷婷之综合激情 | 未成人禁止视频高清在线观看 | 日本美女黄网站 | 欧美性色xo影院永久禁欲 | 中文字幕亚洲天堂 |