成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

Rt3070 AP驅(qū)動(dòng)編譯過程及排錯(cuò)總結(jié)

一、 Rt3070 AP驅(qū)動(dòng)編譯過程及排錯(cuò)總結(jié)1、 將ap 的tar 包解壓到某目錄下2、 按照ap 驅(qū)動(dòng)解壓目錄下的INSTALL 和README 里的步驟,修改makefile 中的

一、 Rt3070 AP驅(qū)動(dòng)編譯過程及排錯(cuò)總結(jié)

1、 將ap 的tar 包解壓到某目錄下

2、 按照ap 驅(qū)動(dòng)解壓目錄下的INSTALL 和README 里的步驟,修改makefile 中的kernel source 目錄路徑及編譯工具。一般在X86架構(gòu)的系統(tǒng)上,不需要修改編譯工具,默認(rèn)為gcc 。

3、 如果系統(tǒng)上沒有kernel source,需要下載和系統(tǒng)內(nèi)核版本一致的內(nèi)核源代碼,解壓,然后確定kernel source目錄,否則編譯會(huì)報(bào)錯(cuò)

4、 Make

5、 Make完畢后驅(qū)動(dòng)源碼下的三個(gè)目錄下會(huì)有三個(gè)ko 結(jié)尾的驅(qū)動(dòng),拷貝出來按照load.6腳本里順序insmod 即可成功。

6、 網(wǎng)卡配置, 修改/etc/Wireless/RT2870AP/下面的RT2870AP.dat 文件(這個(gè)文件及目錄原本是不存在的,需要自己創(chuàng)建目錄,從驅(qū)動(dòng)源碼目錄下將文件拷貝過去),里面的各個(gè)項(xiàng)可以通過看名稱確定意義?;蛘卟榭打?qū)動(dòng)源碼目錄下的說明。

7、 網(wǎng)卡驅(qū)動(dòng)編譯排錯(cuò):

問題1、剛裝完系統(tǒng),檢查完驅(qū)動(dòng)的makefile 基本配置之后,確認(rèn)內(nèi)核目錄、編譯工具正確,進(jìn)行make 。

報(bào)錯(cuò):rtmp_main.c : error : code model "kernel" not supported in the 32 bit mode rtmp_main.c :sorry.unimplemented : 64-bit mode not compiled in

,

是因?yàn)閯傃b完fedora15,內(nèi)核目錄/lib/modules/$(shell uname -r)/build下的.config 文件中的選項(xiàng)沒有載入到make menuconfig中,或者說是make menuconfig之后,exit 前,沒有save 。到/lib/modules/$(shell uname -r)/build下make menuconfig一下,exit 之后選擇save 。問題即可排除。

問題2、報(bào)錯(cuò)implicit declaration of function 'XXX'

某函數(shù)的隱式聲明。其實(shí)就是沒有找到這個(gè)函數(shù)的聲明、定義。這種報(bào)錯(cuò)一般出現(xiàn)在內(nèi)核版本比較新,驅(qū)動(dòng)版本比較舊,一些老的函數(shù)在新內(nèi)核頭文件中,已經(jīng)改用別的名字。比如init_MUTEX()改名為sema_init(sem,1) init_MUTEX_LOCKED改名為sema_init(sem,0),還有比較常見的是usb_buffer_free和usb_buffer_alloc它們分別被更名為

usb_free_coherent和usb_alloc_coherent,參數(shù)沒有變??梢酝ㄟ^報(bào)錯(cuò)的文件、行數(shù)找到這些函數(shù),改成現(xiàn)在的名字,錯(cuò)誤即可排除。

問題3、驅(qū)動(dòng)編譯完成,加載時(shí),提示invalid module,用dmesg|tail命令查看后,發(fā)現(xiàn)是version magic報(bào)錯(cuò)。這個(gè)問題的原因一般是使用的內(nèi)核版本與目前計(jì)算機(jī)上跑的內(nèi)核版本不一致,在移植到嵌入式系統(tǒng)上的時(shí)候常出現(xiàn)。查證AP 驅(qū)動(dòng)的makefile 里內(nèi)核目錄變量指向的是當(dāng)前PC 機(jī)所用內(nèi)核目錄。/lib/modules/`uname -r`/build

這一步?jīng)]有錯(cuò)。那么說明驅(qū)動(dòng)的makefile 是正確的

切換到/lib/modules/`uname -r`/目錄下,查看build (build 在此處是一個(gè)符號鏈接),ls -al 發(fā)現(xiàn)build 指向的目錄是/usr/src/kernels/2.6.35.14-96.fc14.i686,問題在這里,雖然我用的目

,

錄是/lib/modules/`uname -r`/build 這個(gè)目錄貌似與我當(dāng)前內(nèi)核版本(uname -r 即

2.6.35.6-45.fc14.i686)一致,但是build 這個(gè)符號鏈接指向的內(nèi)核源碼卻是

2.6.35.14-96.fc14.i686的,這樣造成了編譯出來的模塊所帶的version magic是

2.6.35.14-96.fc14.i686這一版本,加載時(shí)與uname -r不符。

那么要解決這一問題,就需要修改一下內(nèi)核源碼里的version magic 。

驅(qū)動(dòng)模塊的version magic信息是怎么生成的:

2.6 內(nèi)核下,在linux/vermagic.h中定義有VERMAGIC_STRING,VERMAGIC_STRING不僅包含內(nèi)核版本號,還包含有內(nèi)核使用的gcc 版本,SMP 與PREEMPT 等配置信息。模塊在編譯時(shí),我們可以看到屏幕上會(huì)顯示"MODPOST" 。在此階段, VERMAGIC_STRING會(huì)添加到模塊的modinfo 段。在內(nèi)核源碼目錄下scriptsmodmodpost.c文件中可以看到模塊后續(xù)處理部分的代碼。模塊編譯生成后,通過`modinfomymodule.ko`命令可以查看此模塊的vermagic 等信息。2.6 內(nèi)核下的模塊裝載器里保存有內(nèi)核的版本信息,在裝載模塊時(shí),裝載器會(huì)比較所保存的內(nèi)核vermagic 與此模塊的modinfo 段里保存的vermagic 信息是否一致,兩者一致時(shí),模塊才能被裝載。譬如Fedora core 4 與core 2 使用的都是2.6 版本內(nèi)核,在Fedore Core 2下去加載Fedora Core4下編譯生成的hello.ko ,會(huì)出現(xiàn)"invalid module format" 錯(cuò)誤。

只需要把/usr/src/kernels/2.6.35.14-96.fc14.i686/目錄下源碼中的include/linux/vermagic.h中的VERMAGIC_STRING修改成與當(dāng)前PC 內(nèi)核uname -r一致即可。

修改如下:

#define VERMAGIC_STRING

"2.6.35.6-45.fc14.i686" ""

MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT

MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS MODULE_ARCH_VERMAGIC

,

具體的格式可以在modinfoyourmodule.ko 查看之后再修改,修改完后重新make 即可加載后沒有version magic報(bào)錯(cuò)提示。,重新make ,就可以騙過version magic的檢查。 問題4:驅(qū)動(dòng)編譯完成,加載后報(bào)錯(cuò):invalid module,用dmesg|tail命令查看后,發(fā)現(xiàn)錯(cuò)誤為:

module license unspecified tains kernel

接下來就是一個(gè)什么功能被disable 了,然后一系列的 unknown symbol xxx()。

原因是驅(qū)動(dòng)沒有聲明MODULE_LICENSE("GPL"); 可能因?yàn)闆]有這個(gè)聲明,內(nèi)核關(guān)閉了一些功能,導(dǎo)致一系列函數(shù)無法識別。找到usb_main_dev.c文件,加上GPL 的聲明即可。重新make ,加載,可以驅(qū)動(dòng)網(wǎng)卡。

問題5:fedora15上自帶了對ralink rt2573和rt3070一系列網(wǎng)卡芯片的驅(qū)動(dòng)模塊,在插入網(wǎng)卡的時(shí)候,會(huì)自動(dòng)加載,但是如果你要加載你自己的驅(qū)動(dòng),那么就跟系統(tǒng)自動(dòng)加載的驅(qū)動(dòng)沖突了,可能會(huì)死機(jī)

解決辦法就是插入網(wǎng)卡的時(shí)候,不讓系統(tǒng)自動(dòng)加載自帶的驅(qū)動(dòng)。

先到/lib/modules下面找到module.dep 文件,看rt2573相關(guān)驅(qū)動(dòng)的依賴關(guān)系,也就是網(wǎng)卡插入時(shí),到底哪些有關(guān)驅(qū)動(dòng)被一起加載了,比如rt2573的,有rt73usb rt2x00usb rt2x00lib cfg80211等等。把這些名字添加到系統(tǒng)文件/etc/modprobe.d/blacklist.conf中,如blacklist rt73usb 這個(gè)語句就可以阻止系統(tǒng)在網(wǎng)卡插入usb 時(shí),自動(dòng)加載rt73usb 這個(gè)模塊。記得要把所有有依賴關(guān)系的模塊列全。

,

8、 當(dāng)所有工作都做完,即驅(qū)動(dòng)編譯完成,Wireless 目錄下文件齊全并配置完畢后,按如下命令啟動(dòng)網(wǎng)卡:

insmod rtutil3070ap.ko

insmod rt3070ap.ko

insmod rtnet3070ap.ko

插上網(wǎng)卡后 iwconfig 會(huì)看到ra0出現(xiàn)

ifconfig ra0 up 192.168.1.1

啟動(dòng)網(wǎng)卡并設(shè)置IP 為192.168.1.1

blacklist.conf ,用于阻止內(nèi)核自動(dòng)加載自身所帶的ralink 驅(qū)動(dòng),影響我們自己編譯的驅(qū)動(dòng),內(nèi)核自帶的驅(qū)動(dòng)不太好用。RT2870AP.dat 文件需要拷貝到/etc目錄下面的,這樣網(wǎng)卡起來的時(shí)候會(huì)去讀這個(gè)目錄下的配置,比如密碼、wifi 網(wǎng)絡(luò)名稱等。

二、 DHCP配置

1、 安裝ubuntu 的dhcp server軟件

sudo apt-get install –y isc-dhcp-server

2)修改/etc/dhcp/dhcpd.conf

1)取消authoritative; 的注釋

2)subnet 192.168.1.0 netmask 255.255.255.0 {

,

range 192.168.1.60 192.168.1.254;

option routers 192.168.1.1;

option domain-name-servers 192.168.1.1;

}

設(shè)定DHCP server分配IP 的范圍、并設(shè)定接入設(shè)備的默認(rèn)網(wǎng)關(guān)和dns server為本ADFI 設(shè)備

三、 DNS配置

1、 安裝ubuntu 的dns server軟件

sudo apt-get install –y bind9

2、 修改/etc/bind/下面的dns 配置文件

目前我們設(shè)備上的dns 策略有兩種

1)、ADFI 設(shè)備無需上網(wǎng),本地解析所有終端設(shè)備的dns 請求,并將所有結(jié)果解析成192.168.1.1,即本機(jī)IP 。

修改的配置文件:

Name.conf.local

zone "." {

type master;

file "/etc/bind/db.adfi";

};

,

修改根域名服務(wù)器為本地,這樣就修改了所有的dns 解析的解析途徑,不去訪問公網(wǎng)的根域名服務(wù)器,而是直接查詢本地的/etc/bind/db.adfi文件

Name.conf.default.zones

//zone "." {

// type hint;

// file "/etc/bind/db.root";

//}

注釋掉根域名服務(wù)器的默認(rèn)查詢文件

db.adfi

$TTL 120;2min

@ IN SOA team. root.team. (

2 ; Serial

604800 ; Refresh 7days

86400 ; Retry 1days

2419200 ; Expire 4*7days

604800 ) ; Negative Cache TTL

;

@ IN NS team.

* IN A 192.168.1.1

www IN A 192.168.1.1

ftp IN A 192.168.1.1

@ IN AAAA :: 1days

,

這里定義了所有域名都解析為192.168.1.1的規(guī)則

Named.conf.options

options {

directory "/var/cache/bind";

// If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113

// If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders.

// Uncomment the following block, and insert the addresses replacing // the all-0's placeholder.

forwarders {

192.168.1.1;

};

allow-query{any;};

auth-nxdomain no; # conform to RFC1035

listen-on-v6 { any; };

};

Forwarders 定義為192.168.1.1

,

2)、ADFI 設(shè)備需要上網(wǎng),作為本地的dns server,代理終端去解析它們請求的域名,然后解析完畢后返回給局域網(wǎng)內(nèi)終端相應(yīng)的結(jié)果。具體過程可以參照dns 解析的一般流程。 修改的配置文件和上面所述相同,但是因?yàn)橛蛎皇潜镜馗膶懥?,所以根域名等服?wù)器要恢復(fù)正常配置。

四、 3g網(wǎng)卡配置

1、 安裝ubuntu 常用的3g 配置、撥號工具wvdial 以及ubuntu 系統(tǒng)自帶的3g 模塊識別數(shù)據(jù)庫

sudo apt-get install -y usb-modeswitchusb-modeswitch-data wvdial

2、 在系統(tǒng)斷電的情況下插上3g 網(wǎng)卡和sim 卡,lsusb 可以看到網(wǎng)卡信息

3、 如果是M306網(wǎng)卡,需要再執(zhí)行sudousb_modeswitch -v 230d -p 0111 -u 2 其他網(wǎng)卡不需要

4、 Sudowvdialconf進(jìn)行網(wǎng)卡撥號配置的設(shè)置

5、 嘗試撥號 sudowvdial

6、 如果顯示 ttyUSBx resource busy之類的提示,應(yīng)該是已經(jīng)有wvdial 進(jìn)程在運(yùn)行,kill 掉即可。

7、 如果顯示 init failed 之類的提示,檢查是否插上sim 卡

8、 其他撥號提示 一般都是信號不好 檢查饋線是否插好

,

五、 Squid配置

1、 安裝squid

sudo apt-get install –y squid

2、 修改配置文件/etc/squid/squid.conf文件

#####add

acladfi_networksrc 192.168.1.0/24

#####end of add

acllocal_pagedst 192.168.1.1

acl deny_rep_mime_flashvideo1 rep_mime_type video/x-flv

acl deny_rep_mime_flashvideo4 rep_mime_type application/octet-stream http_reply_access deny deny_rep_mime_flashvideo4 !local_page acl deny_rep_mime_flashvideo5 rep_mime_type video/x-mp4

標(biāo)簽: