從核心中最簡單的驅動程式入手,描述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...