當(dāng)前位置:
首頁(yè) >
二、linux最小驱动
發(fā)布時(shí)間:2025/4/5
22
豆豆
生活随笔
收集整理的這篇文章主要介紹了
二、linux最小驱动
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、最小驅(qū)動(dòng)源碼
如下圖,最小驅(qū)動(dòng)需要四部分,具體看下面源碼
?源碼mini_linux_module.c如下?:
#include <linux/init.h> // Linux源碼目錄下的include/linux/module.h #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); // 如果你不聲明GPL協(xié)議,你的模塊將無(wú)法在Linux 中使用的 MODULE_AUTHOR("JASON"); // 代碼作者static int hello_init(void) {printk(KERN_EMERG "HELLO WORLD enter!\n"); // 打印信息,KERN_EMERG表示緊急信息return 0; }static void hello_exit(void) {printk(KERN_EMERG "HELLO WORLD exit!\n");}module_init(hello_init); // 入口函數(shù) module_exit(hello_exit); // 出口函數(shù)二、驅(qū)動(dòng)模塊的編譯
????????Linux的驅(qū)動(dòng)可以和Linux源碼放在一起編譯,也可以單獨(dú)拿出來(lái)編譯。–為了理解整個(gè)Linux內(nèi)核編譯過(guò)程,可以從學(xué)習(xí)Linux模塊的編譯入手。
????????單獨(dú)編譯驅(qū)動(dòng)需要寫一個(gè)Makefile文件,編寫Makefile文件的最好方式是“依葫蘆畫瓢”。
Makefile文件:?
#!/bin/bash #通知編譯器我們要編譯模塊的哪些源碼 #這里是編譯itop4412_hello.c這個(gè)文件編譯成中間文件itop4412_hello.o obj-m += mini_linux_module.o #源碼目錄變量,這里用戶需要根據(jù)實(shí)際情況選擇路徑 #作者是將Linux的源碼拷貝到目錄/home/topeet/android4.0下并解壓的 KDIR := /home/topeet/android4.0/iTop4412_Kernel_3.0#當(dāng)前目錄變量 PWD ?= $(shell pwd)#make命名默認(rèn)尋找第一個(gè)目標(biāo) #make -C就是指調(diào)用執(zhí)行的路徑 #$(KDIR)Linux源碼目錄,作者這里指的是/home/topeet/android4.0/iTop4412_Kernel_3.0 #$(PWD)當(dāng)前目錄變量 #modules要執(zhí)行的操作 all:make -C $(KDIR) M=$(PWD) modules#make clean執(zhí)行的操作是刪除后綴為o的文件 clean:rm -rf *.o注意:all和clean參數(shù)后面的必須添加Tab鍵,否則會(huì)報(bào)錯(cuò)“*** missing separator.Stop ”
注意:在make?模塊前,請(qǐng)先編譯好/home/topeet/android4.0/iTop4412_Kernel_3.0目錄下內(nèi)核源碼。如果編譯報(bào)錯(cuò),請(qǐng)先執(zhí)行如下:
root@ubuntu:/home/topeet/Android/iTop4412_Kernel_3.0# cp config_for_ubuntu_scp .configroot@ubuntu:/home/topeet/Android/iTop4412_Kernel_3.0# make zImage三、編譯流程分析
編譯會(huì)生成KO文件,KO就是驅(qū)動(dòng)模塊。
四、?加載模塊和卸載模塊
1、insmod加載模塊命令
2、lsmod查看模塊命令
3、rmmod卸載模塊命令
總結(jié)
以上是生活随笔為你收集整理的二、linux最小驱动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一、linux驱动理论
- 下一篇: linux思考の为何要挂载