linux如何配置驅動的內嵌和模組

2021-09-01 02:33:51 字數 3728 閱讀 3299

1.核心編譯命令(makefile)

obj-y:把由foo.c 或者 foo.s 檔案編譯得到foo.o 並連線進核心.

obj-m: 則表示該檔案作為模組編譯.

除了y、m以外的obj-x 形式的目標都不會被編譯。

2.核心編譯 (make menuconfig)

make   menuconfig

*標識編譯到核心,

m標識作為核心模組編譯.

空格,表示該功能不編譯到核心中,即新的核心將不支援該功能.

3.模組靜態編譯到核心和編譯成模組例項

【實驗目的】

配置編譯支援目標板的linux-2.6.22.6的核心,熟悉linux核心的配置選項和編譯過程。

熟悉模組靜態編譯到核心和編譯成模組,動態載入的方法和過程。

【實驗環境】

1、主  機:ubuntu 10.10發行版 [首先得配置好開發環境]

2、目標機:fs2410開發板以及移植好的u-boot-2010.03、核心原始碼包:linux-2.6.22.6.tar.bz2(打補丁後便支援fs2410)

4、交叉編譯器arm-linux-gnu-gcc-3.4.5

【實驗步驟】

一、模組靜態編譯到核心

(1) 解壓核心

$tar xvfz linux-2.6.22.6.tar.bz2

進入解壓後的linux-2.6.22.6目錄打補丁

$patch -p1 < ../linux-2.6.22.6_jz2440.patch

進入核心目錄

$cd linux-2.6.22.6

(2)修改makefile檔案

修改核心目錄樹根下的的makefile,指明交叉編譯器:

$vim makefile

找到archcross_compile,修改

arch = arm

cross_compile = arm-linux-gnu-

儲存退出

(3)新增程式檔案

2410gpio_test_drv.c檔案拷貝到核心**目錄drivers/char

(4)修改makefilekconfig檔案

進入核心的drivers/char目錄

$vim makefile

找到在obj-$(config_hangcheck_timer) += hangcheck-timer.o,在其下一行新增:

obj-$(config_2410gpio_test_drv) += 2410gpio_test_drv.o

儲存退出vim

(5)修改kconfig檔案

$vim kconfig

在以下**段下面

menu "character devices"

加入以下資訊:

config 2410gpio_test_drv

tristate "s3c2410 test drv device support"

depends on arch_s3c2410

---help---

support led test device driver on fs2410 develop board

(6)配置核心將2410gpio_test_drv.c靜態編譯金核心

$cp config_ok   .config(使用提供的配置檔案make s3c2410_defconfig 使用預設的配置檔案)

$make menuconfig(7)編譯核心產生uimage檔案, 並將uimage拷貝到/tftpboot目錄中,復位開發板,重新啟動。編譯命令:

$   make uimage

$ sudo cp -f uimage /tftpboot//uimage

$ sudo chmod 777 -r /tftpboot

(9)複製test/opt/filesystem(nfs檔案系統)目錄下

$ sudo cp test /opt/filesystem/root

重新給目標板上電,讓它使用新的核心

[注意,以下10,11步驟在目標板的終端視窗中執行]

(10)建立gpio_test裝置節點,在開發板上執行如下命令:

# mknod -m 666 /dev/gpio_test c 252 0

(11) 執行test測試,在開發板上執行如下命令:(此時進入的為/root目錄下)

# ./test

此時,d12led燈在閃爍。

二、編譯成模組

(1) 重新配置編譯核心,將gpio_test編譯成模組,動態載入

進入到linux-2.6.22.6目錄執行

$make menuconfig

(3)複製linux-2.6.22.6/drivers/char/2410gpio_test_drv.ko/opt/filesystem/lib

$ sudo cp drivers/char/2410gpio_test_drv.ko /opt/filesystem/lib

重新給目標板上電,讓它使用新的核心

[注意,以下4, 5, 6步驟在目標板的終端視窗中執行]

(4)載入模組 2410gpio_test_drv,在開發板上執行如下命令:

#insmod /lib/2410gpio_test_drv.ko

(5)建立  gpio_test 裝置節點,在開發板上執行如下命令:

# mknod -m 666 /dev/gpio_test c 252 0

(6) 在/root/目錄下執行test測試,在開發板上執行如下命令:

# ./test

此時,d12led燈在閃爍。

while和for的內嵌

迭代,從初始情況按照規律不斷求解中間情況,最終推導出結果。摺紙珠峰 窮舉 把所有情況都列舉一遍,選擇符合條件的選項 百雞百錢 迴圈四要素 初始條件,迴圈條件,迴圈體,狀態改變。while的使用 console.write 請輸入乙個數字 int a int.parse console.readlin...

Linux下彙編語法和內嵌彙編

做了乙個小例子 例子程式 使用了內嵌彙編 int main 彙編 使用gcc s 獲得 file test.c text globl main type main,function main leal 4 esp ecx andl 16,esp pushl 4 ecx pushl ebp movl ...

如何分析linux核心的驅動

在linux核心中,自帶的驅動都以platform模型的形式設計的。一般情況下,所有的platform device在一起定義,並且在一起註冊。driver是設計成了不同的原始檔。因為device放在一起定義,比較好找,我們可以現在找到device,再找driver。找到針對乙個硬體平台的主初始化原...