新手上路,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...