1.編寫乙個簡單的驅動**,在核心態執行的helloworld
#include
#include
int
__init helloworld_init
(void
){
printk
("hello world\n"
);
return
0;
}
void
__exit helloworld_exit
(void
)
moudle_init
(helloworld_init
);
moudle_exit
(helloworld_exit
);
編譯helloworld.c
1)把helloworld.c變成zimage的一部分
複製到核心原始碼根目錄中/deivers/char/(此目錄為簡單的字元驅動裝置)
kconfig
make menuconfig產生選單的要素
makefile
每個目錄下的makefile決定了當前目錄下的檔案(夾)是否要編譯進核心
.config
vmlinux.lds
鏈結檔案
方式一 :修改vi/dervier/char下的makefile檔案
obj-y :必須編譯進核心
obj-m:編譯成模組
obj-y
+=helloworld.o(makefile預設找helloworld.c編譯)
方式二;修改kconfig檔案
vi /dirver/char/kconfig
tristate
三態
config hello
tristate
"helloworld demo"
depends on mach_cw210
||cpu_s5pv210
default
y
----
help
---
my first kernel demo
!
obj-$(config_hello)
+=helloworld.o
命令:dmesg 列印核心上電後列印後的資訊
dmesg | grep "hello" 檢視核心檔案zimage修改結果
2)編譯成核心模組
方式一:1.vi /drivers/char/makefile 2.kconfig也一樣
obj-m
+=helloworld.o
.config中config_hello=m
make modules
會生成.ko檔案、/drivers/char/helloworld.ko
cp drivers/char/helloworld.ko rotfs
insmod helloworld.ko 安裝模組
rmmod helloworld.ko 解除安裝模組
注意會提醒
helloworld:module license 『unspecified』 taints kernel
**中需要新增
module_license("gpl")
模組許可宣告
方式二:
在自己編寫目錄下
vi makefile
obj-m
+=helloworld.o
make -c /opt/kernel m=$(pwd) modules
-c /opt/kernel 指明核心**根目錄
m=$(pwd)
指定了要做的動作makefile
目錄下生成乙個.ko檔案
方式三:
基於第二種
修改makefile
kerneldir ?=/
opt/
kernel
obj-m
+=helloworld
.o
default
:
/*1*/$(
make)-
c $(kerneldir) m=$
(pwd
)module
clean
:
/*2*/
@rm-
f *.
o *.
ko *.
order
*.sy**.
mod*
/*1*/
:注意一定是
table
鍵
/*2*/
這裡@不加存在列印資訊,加了就沒有列印資訊
嵌入式linux IIC驅動
linux驅動和裝置隔離,驅動分層,iic驅動框架分為兩部分 1.1 iic匯流排驅動 platform是虛擬匯流排,針對沒有匯流排的裝置實現,匯流排 裝置 驅動框架,iic不用虛擬,可直接用匯流排bus。iic匯流排驅動有兩個重要資料結構 i2c adapter,i2c algorithm。i2c...
嵌入式Linux SPI驅動
1.1 spi主機驅動 linux使用spi master結構體表示spi主機驅動,定義在 drivers linux spi spi.h transfer 資料傳輸函式 transfer one message spi傳送護具函式,傳送乙個spi message資料 1.2 spi裝置驅動 lin...
Spring註解驅動開發 容器day01
1.回顧舊的方式 xml去開發 此處省略pom.xml檔案!person實體類 test類 package com.yikuan.test import org.junit.after import org.junit.before import org.junit.test import impo...