『壹』 如何將驅動添加進內核
一、 驅動程序編譯進內核的步驟 在 linux 內核中增加程序需要完成以下三項工作: 1. 將編寫的源代碼復制到 Linux 內核源代碼的相應目錄; 2. 在目錄的 Kconfig 文件中增加新源代碼對應項目的編譯配置選項; 3. 在目錄的 Makefile 文件中增加對新源代碼的編譯條目。 bq27501驅動編譯到內核中具體步驟如下: 1. 先將驅動代碼bq27501文件夾復制到 ti-davinci/drivers/ 目錄下。 確定bq27501驅動模塊應在內核源代碼樹中處於何處。 設備驅動程序存放在內核源碼樹根目錄 drivers/ 的子目錄下,在其內部,設備驅動文件進一步按照類別,類型等有序地組織起來。 a. 字元設備存在於 drivers/char/ 目錄下 b. 塊設備存放在 drivers/block/ 目錄下 c. USB 設備則存放在 drivers/usb/ 目錄下。 注意: (1) 此處的文件組織規則並非絕對不變,例如: USB 設備也屬於字元設備,也可以存放在 drivers/usb/ 目錄下。 (2) 在 drivers/char/ 目錄下,在該目錄下同時存在大量的 C 源代碼文件和許多其他目錄。所有對於僅僅只有一兩個源文件的設備驅動程序,可以直接存放在該目錄下,但如果驅動程序包含許多源文件和其他輔助文件,那麼可以創建一個新子目錄。 (3) bq27501的驅動是屬於字元設備驅動類別,雖然驅動相關的文件只有兩個,但是為了方面查看,將相關文件放在了bq27501的文件夾中。在drivers/char/目錄下增加新的設備過程比較簡單,但是在drivers/下直接添加新的設備稍微復雜點。所以下面首先給出在drivers/下添加bq27501驅動的過程,然後再簡單說明在drivers/char/目錄下添加的過程。 2. 在/bq27501下面新建一個Makefile文件。向裡面添加代碼: obj-$(CONFIG_BQ27501)+=bq27501.o 此時,構建系統運行就將會進入 bq27501/ 目錄下,並且將bq27501.c 編譯為 bq27501.o 3. 在/bq27501下面新建Kconfig文件。添加代碼: menu "bq27501 driver" config BQ27501 tristate"BQ27501" default y ---help--- Say 'Y' here, it will be compiled into thekernel; If you choose 'M', it will be compiled into a mole named asbq27501.ko. endmenu 注意:help中的文字不能加回車符,否則make menuconfig編譯的時候會報錯。 4. 修改/drivers目錄下的Kconfig文件,在endmenu之前添加一條語句『source drivers/bq27501/Kconfig』 對於驅動程序,Kconfig 通常和源代碼處於同一目錄。 若建立了一個新的目錄,而且也希望 Kconfig 文件存在於該目錄中的話,那麼就必須在一個已存在的 Kconfig 文件中將它引入,需要用上面的語句將其掛接在 drivers 目錄中的Kconfig 中。 5. 修改/drivers目下Makefile文件,添加『obj-$(CONFIG_BQ27501) +=bq27501/』。這行編譯指令告訴模塊構建系統在編譯模塊時需要進入 bq27501/ 子目錄中。此時的驅動程序的編譯取決於一個特殊配置 CONFIG_BQ27501 配置選項。 6. 修改arch/arm目錄下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加語句 source "drivers/bq27501/Kconfig"
『貳』 linux開發の如何靜態的將驅動模塊編譯進內核
我們知道若要給Linux內核添加模塊(驅動)有如下兩種方式: (1)動態方式:採用insmod命令來給運行中的linux載入模塊。 (2)靜態方式:修改linux的配置菜單,添加模塊相關文件到源碼對應目錄
『叄』 linux如何載入驅動
linux操作系統下,載入驅動的方式有二:
靜態載入驅動;
動態載入驅動;
作為前者,靜態載入驅動是通過將驅動程序編譯到內核而進行的一系列配置操作;對於後者而言則是向內核注冊設備信息,從而在kernel啟動後,再通過insmod指令,關聯好主、次設備號,從而以模塊的形式進行載入的;
二者各有優點,所以應用的場合也是不一樣的;
『肆』 linux如何安裝驅動
在Intel網站直接下載的Linux驅動是e1000-5.2.52.tar.gz(版本可能會有改變),這個壓縮包裡面沒有編譯好的.o的文件,需要在Linux系統下編譯之後才能使用,
因為網卡需要編譯,所以要先確認將內核源文件安裝好,下面是關於內核源文件的安裝
● Linux下添加內核源文件
1. 用rpm –qa|grep kernel-source查看是否安裝了這個包;
如果返回結果中有kernel-source-xxx(其中xxx為當前redhat的內核版本,如rhel3為2.4.21-4EL), 即已經 安裝。如無返回結果則需要安裝kernel-source包。到安裝光碟中找到kernel-source-xxx.i386.rpm,用下面命令安裝此rpm包:
2.如果安裝了用rpm -V kernel-source校驗是否有文件丟失,如果沒有輸出,表示文件完整;
3.如果有丟失用rpm -ivh --force kernel-source-xxxx...把包重新安裝一下;
這個kernel-source包,在您的RH安裝光碟中,在Redhat/RPMS中,如果以前沒有安裝過這個包,那麼用rpm -ivh kernel-source-xxxx...來安裝,如果安裝過,需要覆蓋安裝,使用rpm -ivh --force kernel-source-xxxx...這個命令強制安裝。
註:AS 4 開始,沒有kernel-source這個包了,取而代之的是kernel-dev這個包,檢查這個包有沒有安裝的方法同上
● 驅動安裝步驟:
1. 把這個tar文件拷貝到用戶自己定義的目錄中,例如:
/home/username/e1000 or /usr/local/src/e1000
2. 用tar命令解這個壓縮包:
tar zxf e1000-5.2.52.tar.gz
3. 切換到驅動的src目錄下:
cd e1000-5.2.52/src/
4. 編譯這個驅動模塊:
make
然後安裝這個模塊
make install
這個二進制元將被安裝到如下位置:
/lib/moles//kernel/drivers/net/e1000.o
以上的路徑是默認的安裝位置,在某些linux版本中可能是其他位置,具體信息可以查看在驅動的 tar壓縮包中的ldistrib.txt文件.
5. 安裝模塊:
insmod e1000 (2.6以上的版本最好使用全路徑安裝 P insmod /lib/moles//kernel/drivers/net/e1000/e1000.ko)
6. 設定網卡IP地址:
ifconfig ethx <IP_address> x是網卡介面的號
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
若多個網卡的晶元相同可以cp ifcfg-eth0 ifcfg-eth1~~~~~~
修改下裡面的drive名稱就OK
!!!!!!!!!!!!!!!!!!!
在網卡的編譯中很可能不能進行下去~這個原因除了kernel的開發包沒有安裝外還可能是由於開發環境不完全所引起的!
這時就需要你講開發環境安裝完成,最簡單的辦法就是通過 sysconfig-config-packet 安裝gcc
安裝完成後繼續執行 make ;make install
了解更多開源相關,去LUPA社區看看吧
『伍』 如何新增Linux驅動程序
方法/步驟
1/2 分步閱讀
1. 打開裝置和印表機,然後點擊「新增印表機」,選擇本機連接的列印機還是網路共享的列印機(如截圖),然後點擊不要清單上的列印機,選擇TCP\IP,並輸入列印機IP地址。
查看剩餘5張圖
2/2
2. 裝置類型選擇標准,然後點擊「windowsupdate」選擇列印機製造商和列印機型號,這個時候我們就可以安裝驅動,識別列印機了。
『陸』 如何把設備驅動文件添加到Linux內核編譯選項配置的menuconfig中
1.首先保證已經有驅動源文件了:as352x_afe_charger.c
放在和其他你所要添加的模塊放在一個目錄下,此處是drivers\i2c\chips下。
2.在drivers\i2c\chips\makefile中,添加:
obj-$(CONFIG_AS352X_AFE_CHG) += as352x_afe_charger.o
3.在drivers\i2c\chips\Kconfig
中,添加如下內容:
---------------------無敵分割線-------------------------
config AS352X_AFE_CHG
tristate "AS352X AFE Charger Driver"
depends on I2C_AS352X && AS352X_AFE
help
If you say yes here you get support for AS352X AFE Charger.
This driver can also be built as a mole. If so, the mole
will be called AS352X AFE Charger.
---------------------無敵分割線-------------------------
解釋如下:
(1)AS352X_AFE_CHG是自己定義的名字,當然要盡量保證有意義。
同時,你會注意到,在上面的makefile中添加的
obj-$(CONFIG_AS352X_AFE_CHG) += as352x_afe_charger.o
中的CONFIG_AS352X_AFE_CHG,是CONFIG_加上我們在kconfig下寫的config變數。
這兩個要匹配,才能實現你在menconfig定義的結果,傳遞到makefile中,
以便決定編譯的時候是如何編譯:不編譯/編譯進內核/編譯成模塊
(2)tristate 表示我此處添加的模塊,可以
在make ARCH=arm menuconfig中看到的,選擇之後:
* 編譯到內核中
M 編譯成模塊,即生成XXX.ko
不選中,就不編譯該文件
(3)depends on I2C_AS352X && AS352X_AFE
是前面自己找到的,表示此編譯選項只有當I2C_AS352X 和AS352X_AFE都選中,才會出現。
當然,如果此模塊不依賴於其他模塊,則不需要加上這個depends on了。
【附錄】
1.如果設置成M,mole模式,則要用
make ARCH=arm
編譯出as352x_afe_charger.ko
而
make ARCH=arm uImage
只能編譯內核,而不編譯模塊。
『柒』 Linux內核中如何增加自己的驅動代碼
首先在drivers目錄下面創建GPIO文件夾,,文件夾下面創建三個文件,分別是:gpio.c,Kconfig Makefile,三個文件。
gpio.c是你的驅動程序,Kconfig是配置菜單,也就是它會在make menuconfig之後顯示出來的東西。它和makefile文件一樣需要和上級目錄下的Kconfig文件還有Makefile文件關聯。
在本地目錄下面的Kconfig文件中添加
menu "Fxq_GPIO_Driver "
comment "GPIO_Driver"
config fxq_gpio_driver
tristate "GPIO_Driver"
help
this is 4412_gpio_driver
endmenu
在Makefile文件中添加
obj-$(CONFIG_GPIO) += gpio.o
在上級Kconfig目錄下添加
source "drivers/GPIO/Kconfig"###myconfig file
在上級Makefile文件中添加
obj-$(CONFIG_GPIO) += GPIO/
添加之後全部保存,在命令行中linux目錄中輸入make menuconfig 命令之後,可以見到添加進去的目錄
『捌』 如何向Linux內核提交驅動
假設需要提交hello world這個驅動
首先在driver目錄下建立hello文件夾,然後在裡面新建Makefile、Kconfig、hello.c文件
Makefile文件寫:obj-$(CONFIG_HELLO) += hello.o
Kconfig 文件寫config HELLO
tristate "this is just a hello mole test"
default m
然後在driver目錄下,修改Kconfig,添加 source "/driver/hello/Kconfig"
在driver目錄下,修改Makefile,添加obj-$(CONFIG_HELLO) += hello/
hello.c如下:
#include <linux/kernel.h>
#include <linux/mole.h>
static int __init join_hello(void)
{
pr_info("Enter hello world\n");
static void __exit hello_exit(void)
{
pr_info("exit hello world\n");
}
mole_init(join_hello);
mole_exit(hello_exit);
MODULE_AUTHOR("Linux");
MODULE_DESCRIPTION("this is just a hello mole test");
MODULE_LICENSE("GPL v2");
編譯完成後,生成ko文件,在linux下使用insmod hello.ko就可以加驅動加入內核了,當然你可以將驅動編譯成靜態載入的方式
『玖』 如何在嵌入式LINUX中增加自己的設備驅動程序
Linux驅動程序的使用可以按照兩種方式編譯,一種是靜態編譯進內核,另一種是編譯成模塊以供動態載入。由於uClinux不支持模塊動態載入,而且嵌入式LINUX不能夠象桌面LINUX那樣靈活的使用insmod/rmmod載入卸載設備驅動程序,因而這里只介紹將設備驅動程序靜態編譯進uClinux內核的方法。
下面以UCLINUX為例,介紹在一個以模塊方式出現的驅動程序test.c基礎之上,將其編譯進內核的一系列步驟:
(1)
改動test.c源帶代碼
第一步,將原來的:
#include
#include
char
kernel_version[]=UTS_RELEASE;
改動為:
#ifdef
MODULE
#include
#include
char
kernel_version[]=UTS_RELEASE;
#else
#define
MOD_INC_USE_COUNT
#define
MOD_DEC_USE_COUNT
#endif
第二步,新建函數int
init_test(void)
將設備注冊寫在此處:
result=register_chrdev(254,"test",&test_fops);
(2)將test.c復制到/uclinux/linux/drivers/char目錄下,並且在/uclinux/linux/drivers/char目錄下mem.c中,int
chr_dev_init(
)函數中增加如下代碼:
#ifdef
CONFIG_TESTDRIVE
init_test();
#endif
(3)在/uclinux/linux/drivers/char目錄下Makefile中增加如下代碼:
ifeq($(CONFIG_TESTDRIVE),y)
L_OBJS+=test.o
Endif
(4)在/uclinux/linux/arch/m68knommu目錄下config.in中字元設備段里增加如下代碼:
bool
'support
for
testdrive'
CONFIG_TESTDRIVE
y
(5)
運行make
menuconfig(在menuconfig的字元設備選項里你可以看見我們剛剛添加的'support
for
testdrive'選項,並且已經被選中);make
dep;make
linux;make
linux.text;make
linux.data;cat
linux.text
linux.data
>
linux.bin。
(6)
在
/uclinux/romdisk/romdisk/dev/目錄下創建設備:
mknod
test
c
254
0
並且在/uclinux/appsrc/下運行make,生成新的Romdisk.s19文件。
到這里,在UCLINUX中增加設備驅動程序的工作可以說是完成了,只要將新的linux.bin與Romdisk