A. linux 怎麼載入i2c驅動
假設手上有一塊從淘寶上買來的開發板,我要在開發板的I2C匯流排上增加一個從設備(如at24c08),那麼我要怎樣寫這個「I2C設備驅動」,讓
應用程序可以訪問at24c08呢?
先來看一個最簡單的i2c設備驅動:
static struct i2c_board_info at24cxx_info = { //所支持的i2c設備的列表
I2C_BOARD_INFO("at24c08", 0x50), //一項代表一個支持的設備,它的名字叫做「at24c08」,器件地址是0x50
};
static struct i2c_client *at24cxx_client;
static int at24cxx_dev_init(void)
{
struct i2c_adapter *i2c_adap; //分配一個適配器的指針
i2c_adap = i2c_get_adapter(0); //調用core層的函數,獲得一個i2c匯流排。這里我們已經知道新增的器件掛接在編號為0的i2c匯流排上
at24cxx_client = i2c_new_device(i2c_adap, &at24cxx_info); // 把i2c適配器和新增的I2C器件關聯起來,這個用了i2c匯流排0,地址是0x50。這就組成了一個客戶端
at24cxx_client i2c_put_adapter(i2c_adap);
return 0;
}
static void at24cxx_dev_exit(void)
{
i2c_unregister_device(at24cxx_client);
}
mole_init(at24cxx_dev_init);
mole_exit(at24cxx_dev_exit);
B. linux如何載入驅動
linux操作系統下,載入驅動的方式有二:
靜態載入驅動;
動態載入驅動;
作為前者,靜態載入驅動是通過將驅動程序編譯到內核而進行的一系列配置操作;對於後者而言則是向內核注冊設備信息,從而在kernel啟動後,再通過insmod指令,關聯好主、次設備號,從而以模塊的形式進行載入的;
二者各有優點,所以應用的場合也是不一樣的;
C. 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社區看看吧
D. linux中動態載入驅動的過程是怎麼樣的,能給個詳細的嗎
介紹個動態載入模塊的過程
在該驅動中,我們假設對鍵盤的獲取是以0.2s為周期執行。源代碼如下
static struct timer_list timer;///////我們定義的定時器,也許你會問timer_list是什麼來的,其實一看名稱就應該就知道了,而為什麼要用到list那麼多定時器呢?其實在linux中還有很多相同的定義,比如說信號,我們定義的也是信號集,你可以定義該list是一個元素的,也可以是多個的。所以對於 timer_list就可以這樣描述:在未來某一個特定時刻執行某一系列特定任務的功能。下面我們還會給出內核中timer_list的具體描述,^_^ 好像我的話又說多了
static int Keypad_starttimer(void)
{
init_timer(&timer);//初始化定時器結構
timer.function=Keypad_timer;//超時服務程序
timer.expires=jiffies+20;//當前時刻加0.2s
add_timer(&timer);
return 0;
}
///超時服務程序
static void Keypad_timer(unsigned long data)
{
read_xy();
}
/////////接下來說下timer-list這個數據結構,如果你不感興趣的話可以跳過,該結構在include\linux\timer.h中定義
struct timer_list
{
struct list_head entry;
unsigned long expries;
spinlock_t lock;
unsigned long magic;
void (*function)(unsigned long);
unsigner long data;
struct tvec_t_base_s *base;
}
七.利用等待隊列實現阻塞型I\O
在用戶程序執行讀操作的時候有可能尚且沒有數據可以讀取,為此需要讓read操作等待,直到有數據可以讀取,這就是阻塞型i\o,阻塞型io可以通過使用進程休眠方法實現。在無數據可以讀取的時候,採用等待隊列讓進程休眠,直到有數據到達的時候才喚醒進程完成數據的讀操作。
在本驅動中的read,若循環隊列緩沖區中沒有數據,則進程進入休眠態,定時器函數每隔0.2s讀取鍵值一次,將按鍵狀態放入緩沖並且適時喚醒進程讀取數據。
等待隊列的使用流程如下:
1.聲明一個等待隊列
2.把當前進程加入到等待隊列中
3.把進程的狀態設置為TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE;
4.調用schele,以讓出cpu
5.檢測所需要的資源是否可用,若是,把當前進程從等待隊列中刪除,否則轉3循環
接下來我們在對read中有關等待隊列阻塞實現做具體的解釋
static ssize_t Keypad_read(struct file *filp,char *buf,ssize_t count,loff_t *l)
{
DECLEARE_WAITQUEUE(wait,current);//聲明等待隊列,將當前進程加入到等待隊列中
KEY_EVENT t;
ulong out_buf[2];
if(head==tail)//當前循環隊列中沒有數據可以讀取
{
if(filp->f_flags & O_NONBLOCK)//假如用戶採用的是非堵塞方式讀取
return _EAGAIN;
add_wait_queue(&queue,&wait);//將當前進程加入等待隊列
current->state=TASK_INTERRUPTIBLE;//設置當前進程的狀態
while((head==tail)&&!signal_pending(current))//假若還沒有數據到循環隊列並且當前進程沒有受到信號(該類信號具體來說是未決的休眠)
{
shele();//進程調度
current->state=TASK_INTERRUPTIBLE;
}
current->state=TASK_RUNNING;//該進程恢復執行
remove_wait_queue(&queue,&wait);//移出等待隊列
if(head==tail)
return count;
t=get_data();//調用get_data()函數,得到緩沖區中的數據,下面將給予詳細的 介紹
out_buf[0]=t.status;
out_buf[1]=t.click;
_to_user(buf,&out_buf,sizeof(out_buf));//將得到的鍵值拷貝到用戶數據區
return count;
}
}
E. linux系統中哪個命令可以用來載入驅動程序
在2.4內核中,載入驅動命令為:insmod ,刪除模塊為:rmmod;
在2.6以上內核中,除了insmod與rmmod外,載入命令還有modprobe;
insmod與modprobe不同之處:
insmod 絕對路徑/××.o,而modprobe ××即可,不用加.ko或.o後綴,也不用加路徑;最重要的一點是:modprobe同時會載入當前模塊所依賴的其它模塊;
lsmod查看當前載入到內核中的所有驅動模塊,同時提供其它一些信息,比如其它模塊是否在使用另一個模塊。
F. Ubuntu linux如何安裝硬體驅動
inux的驅動一般有兩種格式,分別為:tar和rpm格式。
rpm安裝步驟:
1.將驅動程序文件bcm5700-.src.rpm復制到一個臨時目錄中,並在此目錄中運行以下命令:
rpm –ivh bcm5700-.src.rpm
2.運行以下命令切換到驅動目錄中:
cd /usr/src/redhat/SPECS/
3.此目錄中會生成一個名字為bcm5700.spec的文件,運行以下命令對驅動程序進行編譯:
rpmbuild –bb bcm5700.spec (對4.x.x版本的RPM適用)或 rpm -bb bcm5700.spec
4.運行以下命令切換到RPM目錄中:
cd /usr/src/redhat/RPMS/i386/
5.運行以下命令安裝驅動程序:
rpm –ivh bcm5700-.i386.rpm (對於Red Hat 7.2, 7.3, 2.1AS和其他包含老版本驅動的系統需要使用--force的參數,強制用新的驅動替換系統自帶的老版本驅動)
6.運行以下命令載入驅動模塊:
insmod bcm5700
7.運行kudzu命令,系統會自動搜索到硬體,進行配置即可。
或者重新啟動系統,啟動過程中系統會自動找到硬體,進行相應配置即可。
tar格式安裝步驟:
1. 將驅動程序壓縮文件bcm5700-.tar.gz復制到一個臨時目錄中,並使用以下命令解壓縮:
tar xvzf bcm5700-.tar.gz
2.構建驅動程序為運行內核可載入模塊
cd bcm5700-/src
make
3.載入測試
insmod bcm5700
4.載入驅動程序
make install
5.重新啟動系統,啟動過程中找到硬體,進行相應配置。
或者直接運行kudzu命令,系統會自動搜索到硬體,進行配置即可。
G. linux系統怎麼載入raid驅動
一般情況想常用的伺服器,ibm hp dell等,linux系統都會內置raid卡允動的,不需要自己安裝驅動,至少我是很少碰見要裝驅動的情況。如果發現安裝時認不到硬碟。可以按照以下官方說明來安裝驅動。有問題可以在上班時間HI我。都在線。
RHEL5, unlike previous RHEL version, requires additional steps for installing the OS onto an Intel(R) Embedded Server RAID Technology volume.
1) Create a RAID array using the Intel Embedded Server RAID Technology II RAID BIOS Configuration Utility.
2) Boot your system using RHEL disc one.
3) At boot prompt type 「linux nostorage」
4) Proceed with the installation and you will see a screen which provides you with ?Add device? button.
5) Click 「Add Device」, a list of all drivers will appear
6) Press F2 to select driver from floppy
7) Insert the floppy with the Installer DUD image
8 ) Select device that corresponds to the floppy drive (sda in case of USB floppy)
9) After the driver is loaded the list of all drivers will appear again
10) Scroll down the driver list and select. Update megaide driver? in the list
11) Click OK
12) The driver will be loaded and the list of detected devices will appear
13) Click Done
14) Complete installation with RHEL CD
H. 如何在嵌入式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
I. linux系統怎麼載入raid驅動
光碟啟動進入安裝界面,在boot:後面輸入linux dd按回車
如果驅動不正確則提示:Failed to mount drive disk
如果驅動正確則提示載入usb-storage ,此時驅動已經完全載入
詢問是否要載入驅動選擇yes
選擇sda設備usb設備都是被識別為scsi設備
是否要載入/dev/sda設備選擇ok
進入下圖,點擊ok
選擇你需要的驅動程序按ok
是否要載入額外的驅動選擇no,這樣就可以正常安裝系統了
J. linux如何載入驅動
linux操作系統下,載入驅動的方式有二:
靜態載入驅動;
動態載入驅動;
作為前者,靜態載入驅動是通過將驅動程序編譯到內核而進行的一系列配置操作;對於後者而言則是向內核注冊設備信息,從而在kernel啟動後,再通過insmod指令,關聯好主、次設備號,從而以模塊的形式進行載入的;
二者各有優點,所以應用的場合也是不一樣的;