下面的**是乙個完整的最簡單的「hello world」模組
c**名稱hello.c
下面是交叉編譯所需的makefile
其中的kerneldir = /home/wanxiao/code/tools/utu-linux_for_s3c2440_v1.5.3 是根據自己的核心檔案位址來修改相應的路徑,這裡我的核心使用的是utu-linux_for_s3c2440_v1.5.3
然後make,生成hello.ko,直接將其傳送到開發板中。
修改許可權 chmod +x hello.ko
新增模組 insmod hello.ko
檢視已新增模組 lsmod
解除安裝模組 rmmod hello.ko
見下圖所示
下面對這個模組中的c**進行修改,新增引數
其中的一下幾條語句實現了模組中引數的新增,尤其是 module_param(name,type,perm);函式
static char *whom = "world";
static int howmany = 1;
module_param(howmany,int,s_irugo);
module_param(whom,charp,s_irugo);
他的前2個引數實際上都很好理解,第三個引數最後的 module_param 欄位是乙個許可權值; 你應當使用 中定義的值. 這個值控制誰可以訪問這些模組引數在 sysfs 中的表示.如果 perm 被設為 0, 就根本沒有 sysfs 項. 否則, 它出現在 /sys/module下面, 帶有給定的許可權. 使用 s_irugo 作為引數可以被所有人讀取, 但是不能改變; s_irugo|s_iwusr 允許 root 來改變引數. 注意, 如果乙個引數被 sysfs 修改, 你的模組看到的引數值也改變了, 但是你的模組沒有任何其他的通知. 你應當不要使模組引數可寫, 除非你準備好檢測這個改變並且因而作出反應.
編譯-傳送到開發板-新增模組-解除安裝模組
見下圖所示
Linux裝置驅動之《字元裝置驅動》
linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...
Linux裝置驅動之字元裝置驅動
一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...
linux驅動之塊裝置驅動
塊裝置驅動的系統架構 塊裝置註冊過程 1,註冊裝置塊驅動程式 register blkdev 2,初始化請求佇列 blk init queue 3,指明扇區的大小 blk queue logical block size dev queue,sect size 4,申請乙個gendisk結構,初始化...