LDD3學習筆記 模組的編譯

2021-07-29 22:02:17 字數 1302 閱讀 9183

新手上路,ldd3學習之旅開始,以下內容純屬筆記,若有錯誤,望見諒!

1.什麼是「模組」?

可以在系統執行時加入到核心中的**。故:模組包括但不限於裝置驅動程式。

2.如何寫乙個模組?

1). .c檔案  2).實現module_init, module_exit
3.ldd3中makefile編寫規則(照搬):

ifneq($(kernelrelease))  //如果能訪問到核心樹,pc系統的核心樹

obj-m := hello.o

else

kerneldir ?= /lib/modules/$(shell uname -r)/build //pc系統核心樹

pwd := $(shell pwd) //預編譯的模組源**所在目錄

default:

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

endif

1.ldd3中講述的模組編譯是純linux系統的,對於嵌入式平台可以採用下面的方法,一般來說更方便。

1).在kernel/drivers/***/下編寫原始碼

2).在kernel/drivers/***/目錄下建立kconfig和makefile檔案

kconfig內容如下
menu "aaa"

config bbb

tristate "ccc"

default m

---help---

dddddddd

endmenu

makefie內容如下:

obj-$(

config_bbb)

3).然後在kernel/drivers目錄下的

kconfig中新增`source "drivers/***"`

makefie中新增:`obj-y +=***`

4).然後在kernel目錄下執行:

make menuconfig 配置模組:

這樣就會在kernel/drivers/***/目錄下生成.ko檔案

5).但是上述方法對於部分平台的原始碼可行,部分不可行。如果是直接編譯到核心,即obj-y,那麼無論什麼平台都是可行的,且要常見的多。

LDD3 帶有引數的模組

include include include static char who who static int time 1 module param time,int,s irugo module param who,charp,s irugo static int hello init void ...

LDD3學習筆記(11) 記憶體分配

kmalloc分配記憶體快並且不清零獲得的記憶體區,記憶體區保留它原來的內容,分配的區在物理記憶體中連續。include void kmalloc size t size,int flags void kfree void obj 記憶體分配的最常用介面.include gfp user gfp k...

LDD3學習筆記(7) 除錯技術

1 核心中的除錯 開發中需要啟用的配置選項 config debug kernel config debug slab config debug pagealloc config debug spinlock config debug spinlock sleep config init debug...