日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何将多个源文件编译为一个.ko

發(fā)布時(shí)間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何将多个源文件编译为一个.ko 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

陸陸續(xù)續(xù)也寫(xiě)了幾個(gè)Linux內(nèi)核模塊了,但每次都是把代碼寫(xiě)在一個(gè)源文件中,上次嘗試了寫(xiě)在兩個(gè).c文件中,結(jié)果沒(méi)有編譯通過(guò)。 無(wú)奈之下,將其中一個(gè).c文件重命名成.h文件,再include當(dāng)另一個(gè)當(dāng)中。但是,在.h文件中寫(xiě)函數(shù)的實(shí)現(xiàn)總感覺(jué)怪怪的。 今天查看了以下Kbuild的文檔,有如下描述

[c-sharp]?view plaincopy
  • If?a?kernel?module?is?built?from?several?source?files,?you?specify??
  • ?that?you?want?to?build?a?module?in?the?same?way?as?above.??
  • ??
  • ?Kbuild?needs?to?know?which?the?parts?that?you?want?to?build?your??
  • ?module?from,?so?you?have?to?tell?it?by?setting?an??
  • ?$(<module_name>-objs)?variable.??
  • ??
  • ?Example:??
  • ?????#drivers/isdn/i4l/Makefile??
  • ?????obj-$(CONFIG_ISDN)?+=?isdn.o??
  • ?????isdn-objs?:=?isdn_net_lib.o?isdn_v110.o?isdn_common.o??
  • ??
  • ?In?this?example,?the?module?name?will?be?isdn.o.?Kbuild?will??
  • ?compile?the?objects?listed?in?$(isdn-objs)?and?then?run??
  • ?"$(LD)?-r"?on?the?list?of?these?files?to?generate?isdn.o.??
  • 整理自己的源文件成兩個(gè).c文件(simpLB.c和sahu_lb_tools.c)、一個(gè).h文件(sahu_lb.h)和Makefile文件。兩個(gè).c文件都包含了sahu_lb.h

    按照Kbuild的文檔所述,把Makefile改成如下內(nèi)容:

    [c-sharp]?view plaincopy
  • obj-m?+=simpLB.o???
  • simpLB-objs:=sahu_lb_tools.o??
  • all:??
  • ??make?-C?/lib/modules/`uname?-r`/build?M=`pwd`??
  • clean:??
  • ??make?-C?/lib/modules/`uname?-r`/build?M=`pwd`?clean??
  • install:??
  • ??/sbin/insmod?simpLB.ko??
  • remove:??
  • ??/sbin/rmmod?simpLB??
  • 編譯沒(méi)有問(wèn)題,但是安裝后模塊的功能沒(méi)有實(shí)現(xiàn),就連我在init_module()中打印的提示信息都沒(méi)有。lsmod卻有simpLB。

    只好再上網(wǎng)查了查,發(fā)現(xiàn)如下文章:

    http://www.linuxquestions.org/questions/programming-9/linking-multiple-files-kernel-module-programming-701735/

    按照文章的的建議,我把Makefile修改成如下內(nèi)容:

    ?

    [c-sharp]?view plaincopy
  • obj-m?+=sahuLB.o???
  • sahuLB-objs:=simpLB.o?sahu_lb_tools.o??
  • all:??
  • ??make?-C?/lib/modules/`uname?-r`/build?M=`pwd`??
  • clean:??
  • ??make?-C?/lib/modules/`uname?-r`/build?M=`pwd`?clean??
  • install:??
  • ??/sbin/insmod?sahuLB.ko??
  • remove:??
  • ??/sbin/rmmod?sahuLB??
  • 總結(jié)

    以上是生活随笔為你收集整理的如何将多个源文件编译为一个.ko的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。