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
找到arch和cross_compile,修改
arch = arm
cross_compile = arm-linux-gnu-
儲存退出
(3)新增程式檔案
將2410gpio_test_drv.c檔案拷貝到核心**目錄drivers/char中
(4)修改makefile和kconfig檔案
進入核心的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。找到針對乙個硬體平台的主初始化原...