内核程序实现多文件的调用
要實現這個功能,編程步驟和應用程序多文件的調用是一樣的,只是在這個基礎上,會顯示的將變量或者函數名進行導出,導出的宏如下:
EXPORT_SYMBOL(變量名或者函數名);
或者
EXPORT_SYMBOL_GPL(變量名或者函數名);
前者導出的變量或者函數能夠給任何一個內核程序調用;后者導出的變量或者函數只能給那些遵循GPL協議的內核程序調用;
?
案例:編寫內核程序,掌握內核符號導出
實施步驟:
PC機執行:
1.mkdir?/opt/drivers/day02/3.0
2.cd?/opt/drivers/day02/3.0
3.vim?test.h?//函數的聲明
4.vim?test.c?//函數的定義
5.vim?helloworld.c?//函數的調用
6.vim?Makefile
??obj-m?+=?helloworld.o
??obj-m?+=?test.o
??或者
??obj-m?+=?helloworld.o?test.o
??結果:
??????test.c?->?test.ko
??????helloworld.c?->?helloworld.ko
7.make
8.cp?*.ko?/opt/rootfs/?
?
ARM板上執行:
加載模塊
insmod?test.ko
insmod?helloworld.ko
卸載模塊
rmmod?helloworld
rmmod?test
注意:加載卸載順序
第二種方法: 使用modprobe 加載?
modprobe命令使用步驟:
1.?進入內核源碼?cd?/opt/kernel
make?modules
2.?修改?Makefile,添加如下信息
install:
make?-C?$(KDIR)?SUBDIRS=$(PWD)?modules_install?INSTALL_MOD_PATH=/opt/
#modules_install?表示安裝模塊,主要是產生modules.dep,
依賴關系文件,然后將.ko拷貝到extra目錄。
#INSTALL_MOD_PATH?表示安裝到那個目錄下
#一旦執行make?install?安裝模塊時,最后在/opt目錄生成一個lib目錄,
然后將lib目錄的內容拷貝到/opt/rootfs/lib下
3.?make?//編譯模塊
4.?make?install?//安裝模塊
5.?cp?/opt/lib/*?/opt/rootfs/lib?-frd
6.?在開發板上進行加載:
modprobe?helloworld.ko?/modprobe?helloworld
#說明:?modprobe默認到/lib/modules/2.6.32.17-davinci1/下找以來文件modules.dep,
根據依賴文件,決定先加載哪個模塊!模塊在/lib/modules/2.6.32.17-davinci1/extra
7.?卸載模塊
modprobe?-r?helloworld??
?
?
總結:?modprobe用于復雜的有依賴關系的模塊加載。且它的操作其實也不方便。
如果依賴關系簡單的話還是用EXPORT_SYSBOL?();
?
?
總結
以上是生活随笔為你收集整理的内核程序实现多文件的调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网晚报 | 2月28日 星期一 |
- 下一篇: 第三部分 Calendar函数接口