第乙個hello world 驅動實驗總結

2021-06-16 09:24:38 字數 1615 閱讀 4377

本次採用的是模組動態載入方式(驅動的載入方式存在兩種:一是靜態載入,而是動態載入,其中動態載入,是不需要對源**中的char下的kconfig和makefile檔案修改的,在需要使用的時候直接使用insmod *.ko 即可,解除安裝的時候直接用rmmod *.ko即可)

我在我的工作目錄下/root/workspace/下新建了乙個hello目錄,用於儲存hello.c 和makefile檔案(注意在這裡必須是makefile,不可以是makefile,不然會出問題)

其中我的helloc.c檔案的源**如下:

#include
#inlcude
static int hello_init(void)
static void hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
module_license("dual bsd/gpl");
makefile的源**:

obj-m := hello.o

ifeq ($(kernelrelease),)

kernelrelease ?= /root/workspace/linux_src/linux-2.6.12
pwd := $(shell pwd)
modules:
$(make) -c $(kernelrelease) m= /$(pwd) modules
endif

特別說明:

1.在ifeq 後面有乙個空格,ifeq ($(kernelrelease),)的意思是判斷是否源**的目錄是否已經定義了,其中kernelrelease 為linux源**的目錄。在我的電腦裡面就是/root/workspace/linux_src/linux-2.6.12

2.?= 的目的是如果kernerelease 如果已經定義過了,那麼使用原來的,如果未定義,也就相當於 :=

3.pwd := $(shell pwd) 其中shell 為makefile中的函式,相當於"` `",將pwd執行的結果賦值給pwd

在以上條件已經準備好了之後,直接在/root/workspace/hello 目錄下輸入make,就會產生: hello.ko檔案,將本檔案拷貝到arm板子的某個資料夾下(我才用的是超級終端的檔案傳輸功能,然後直接放在/tmp資料夾下),修改檔案的許可權 chmod 777 hello.ko ,然後直接insmod hello.ko 就會看到 hello, world,然後解除安裝rmmod hello.ko 就會看到goodbye , world

驅動開發(第乙個程式Hello World

首先新建乙個目錄 比如 mkdir helloworld 然後進入到這個目錄 cd helloworld 第一步 vi hello.c include include module license dual bsd gpl static int hello init void printk kern...

第乙個程式「hello world」

include include int main include是要告訴編譯器,包含乙個標頭檔案,在c語言當中,任何庫函式呼叫都需要提前包含標頭檔案 標頭檔案 代表讓c語言編譯器去系統目錄下尋找相關的標頭檔案 標頭檔案 代表讓c語言編譯器去使用者當前目錄下尋找相關標頭檔案 如果是使用了乙個c語言庫函...

部落格第乙個帖子,hello world

hello world.第一次用論壇 hello up csdn hello 中的 public static void sop object obj 列印 public static void sop object obj 列印 hello world name 5 1用空格可以改變 長度 按en...