01 第乙個核心模組程式

2021-09-26 22:26:03 字數 2863 閱讀 1586

從核心中最簡單的驅動程式入手,描述linux驅動開發,主要文章目錄如下(持續更新中):

01 - 第乙個核心模組程式

02 - 註冊字元裝置驅動

03 - open & close 函式的應用

04 - read & write 函式的應用

05 - ioctl 的應用

06 - ioctl led燈硬體分析

07 - ioctl 控制led軟體實現(暫存器操作)

08 - ioctl 控制led軟體實現(庫函式操作)

09 - 註冊字元裝置的另一種方法(常用)

10 - 乙個cdev實現對多個裝置的支援

11 - 四個cdev控制四個led裝置

12 - 虛擬串列埠驅動

13 - i2c驅動

14 - spi協議及驅動講解

15 - spi linux驅動**實現

16 - 非阻塞型i/o

17 - 阻塞型i/o

18 - i/o多路復用之 select

19 - i/o多路復用之 poll

20 - i/o多路復用之 epoll

21 - 非同步通知

demo.c

#include

/* 函式名可以任意指定又帶來了乙個新的問題,那就是有可能和核心中的已有函式重

名,為了避免重名而帶來的重複定義問題,在函式名前加static關鍵字修飾,經static

修飾的函式鏈結屬性為內部,從而解決了上述問題。這就是幾乎所有的驅動函式都要

加static修飾的原因。

模組的初始化函式會且僅會被呼叫一次,在呼叫完成後,該函式不應該被再次呼叫,

所以該函式的記憶體應該被釋放掉,在函式前加__init可以達到此目的。

__init是把標記的函式放在elf檔案(可執行檔案)的特定**段,在模組載入這些時

將會單獨分配記憶體,這些函式呼叫成功後,模組的引導程式會釋放這部分的記憶體空間。

__exit用來修飾清除函式,和__init的作用類似,但用於模組的解除安裝,如果模組不允

許解除安裝,那麼這段**完全就不用載入。

*/static

int __init demo_init

(void)/*

列印檔案名,函式名和行號

*/static

void __exit demo_exit

(void

)/*

模組的入口函式

module_init 是乙個巨集,用於指定 init_module 的函式別名是 demo_init,這樣在

模組的初始化時就可用別名來定義了,module_exit同樣。

*/module_init

(demo_init)

;/* 模組的出口函式 */

module_exit

(demo_exit)

;/*

gpl協議。linux是乙個開源的專案,為了使linux在發展的過程中不成為乙個閉源

的專案,這就要求任何使用linux原始碼的個人或組織在免費獲得原始碼並可針對原始碼做

任何修改和再發布的同時,必須將修改後的原始碼發布,這就是gpl許可證協議。

*/module_license

("gpl"

);

kerneldir ?

=/home/linux/ti-processor-sdk-linux-am335x-evm-

05.02

.00.10

/board-support/linux-

4.14

.79pwd :

= $(shell pwd)

all:

make arch=arm cross_compile=arm-linux-gnueabihf-

-c $(kerneldir) m=$(pwd) modules

install:

sudo cp *

.ko /tftpboot

clean:

make arch=arm cross_compile=arm-linux-gnueabihf-

-c $(kerneldir) m=$(pwd) clean

obj-m +

= demo.o

解釋

make -c (ke

rnel

dir)

m=

(kerneldir) m=

(kerne

ldir

)m=(pwd) modules 意思是進入到核心原始碼目錄(由-c (ke

rnel

dir)

指定),

編譯在內

核原始碼樹

之外的一

個目錄(

由m

=(kerneldir)指定),編譯在核心原始碼樹之外的乙個目錄(由m=

(kerne

ldir

)指定)

,編譯在

核心原始碼

樹之外的

乙個目錄

(由m=

(pwd)指定)中的模組(由最後的modules指定)。

root@am335x-evm:

~# insmod demo.ko

[1528.365037

]/mnt/share/project/

01_module/demo.c -- demo_init --

17root@am335x-evm:

~# rmmod demo.ko

[1535.247237

]/mnt/share/project/

01_module/demo.c -- demo_exit --

27

01第乙個程式

使用編輯器輸入以下原始碼 模擬輸入 輸出,當輸入正確數字,則輸出 ok 如果錯誤,則輸出 error print hello,beyond temp input 猜猜我心裡想的數字 guess int temp if guess 2 print ok else print error print g...

第乙個struts 程式 01

1 登入http struts.apache.org download 該資料夾下包含了基於 struts 2 的示例應用,這些示例應用對於學習者是非常有用的資料。docs 該資料夾下包含了 struts 2 的相關文件,包括 struts 2 的快速入門 struts 2 的文件,以及 api文件...

第乙個核心測試程式

1.在vmware安裝上centos 網路設定,參考注意在centos 右上角的網路圖示選擇對應的網路裝置。2.安裝gcc環境 yum install gcc c 3.安裝核心檔案 yum install kernel devel 4.編寫hello.c檔案 例子參考 include include...