亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 6081 | 回復(fù): 0
打印 上一主題 下一主題

pdnsd軟件移植android過程 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-03-11 00:02 |只看該作者 |倒序?yàn)g覽
pdnsd是一個(gè)DNS本地緩存軟件。它的特點(diǎn)是緩存可以存儲(chǔ)到硬盤上,系統(tǒng)重啟都仍然保存(當(dāng)然也可以設(shè)置為不保存)。
我的安卓系統(tǒng)設(shè)備有時(shí)要通過代理上網(wǎng),因?yàn)閁DP協(xié)議數(shù)據(jù)包難以穿過只支持TCP協(xié)議的代理通道,所以無法成功DNS解析。導(dǎo)致各種網(wǎng)絡(luò)應(yīng)用無法使用。
我想通過建立本地DNS服務(wù)的辦法來解決這個(gè)問題。在平時(shí)無限制網(wǎng)絡(luò)環(huán)境下,訪問需要用到域名,把域名解析存儲(chǔ)到本地。在代理上網(wǎng)環(huán)境下,訪問本地DNS服務(wù),獲得已保存過的域名解析信息。
android上好像沒有現(xiàn)成的這種軟件。有一個(gè)移植的叫dnsmasq的軟件,雖然有本地緩存功能,但它的緩存只存在內(nèi)存里,服務(wù)或系統(tǒng)一重啟就沒有了。后來就找到了這個(gè)pdnsd,能滿足我需要的功能。但是就需要移植。
我電腦是x86 linux系統(tǒng)。移動(dòng)設(shè)備是arm android 2.3.3系統(tǒng)。Pdnsd版本1.2.8
現(xiàn)在把移植過程簡(jiǎn)單記載如下。

首先下載安裝交叉編譯軟件以及pdnsd源碼。
參考了網(wǎng)上的“Android原生(Native)C開發(fā)之八:Toolchain環(huán)境搭建篇”這篇文章。沒有下載全部android源碼。只下載了源碼中的bionic(也許連這個(gè)也不用下,我不確定)。
現(xiàn)在android源碼不能直接從google下載了。要先在google下載repo腳本,并設(shè)置環(huán)境變量。下載android其中的bionic源碼。
下載android開發(fā)工具NDK。我們只需要其中的toolchain。使用NDK自帶的toolchain分離工具,make-standalone-toolchain.sh。要指定你需要的android版本。本來我的是android 2.3.3,平臺(tái)版本應(yīng)該是10,但ndk沒有10這個(gè)版本,比10低的是9,比10高的是15。15是android 4.0,9是x86的,我選了8。分離出來是個(gè)名為arm-linux-androideabi-4.4.3的壓縮包,把它解壓到某個(gè)目錄。再把先前bionic目錄中的一些頭文件復(fù)制到arm-linux-androideabi-4.4.3/sysroot/usr/include下(也許不用復(fù)制,toolchain的頭文件已經(jīng)是完整的了,有機(jī)會(huì)試試)。

現(xiàn)在開始編譯pdnsd源碼。
設(shè)置環(huán)境
export PATH=toolchain安裝目錄/binPATH
export CC=arm-linux-androideabi-gcc
export LD=arm-linux-androideabi-ld
export AR=arm-linux-androideabi-ar
本來直接想用arm-linux-androideabi-gcc來編譯的,結(jié)果一執(zhí)行,提示config.h找不到。自己指定了一個(gè)空的config.h文件,又提示很多宏沒定義?磥砗芏嗪晔怯弥付ǖ囊粋(gè)config.h頭文件來定義的。這個(gè)config.h本來是沒有的,是由configure腳本生成。先執(zhí)行./configure,讓它生成config.h,打開一看,果然定義了很多宏。再包含進(jìn)這個(gè)頭文件編譯,又提示一些宏重復(fù)定義之類的錯(cuò)誤信息。唉,算了我也不是程序員,搞不懂這些高深的東西。還是用軟件自帶的腳本來解決這些問題吧。
最好先在configure文件里把a(bǔ)c_default_prefix=/usr/local參數(shù)部分改成你將在android中放pdnsd.conf配置文件的上一級(jí)目錄,比如將來要放在android的/etc下面,就改成ac_default_prefix=/。否則,以后要執(zhí)行的時(shí)候要加上-c參數(shù)指定配置文件。
執(zhí)行./configure –host=arm-linux-androideabi
configure腳本沒能通過,提示mkfifo功能找不到。不知道是什么意思。在configure腳本中找到包含這個(gè)mkfifo的語句,for ac_func in nanosleep gettimeofday mkfifo select socket strerror uname snprintf vsnprintf
把mkfifo這個(gè)詞刪掉。再執(zhí)行configure,通過了。不知道去掉檢查mkfifo會(huì)有什么影響。以后再看吧。在config.h文件中修改CACHEDIR這個(gè)宏的定義為你想在android中存放緩存文件的目錄路徑。如果跟后面你實(shí)際放的路徑不同,pdnsd-ctl這個(gè)控制工具程序?qū)o法獲取pdnsd的狀態(tài)信息。
執(zhí)行make。得到編譯好的文件,src下的pdnsd和pdnsd-ctl下的pdnsd-ctl。用file pdnsd看一下,的確顯示是arm編碼。
接下來就是拷貝到android設(shè)備中。如果有驅(qū)動(dòng),可以直接通過數(shù)據(jù)線拷到設(shè)備的sdcard上。當(dāng)然也可以用標(biāo)準(zhǔn)的adb命令來做。除了拷貝可執(zhí)行文件外,還要拷貝一個(gè)參數(shù)配置文件pdnsd.conf。參考網(wǎng)上的資料,自己寫一個(gè),填好緩存大小、存放目錄、dns服務(wù)器地址等參數(shù)?蓤(zhí)行文件只拷pdnsd就可以,另外一個(gè)pdnsd-ctl可用可不用。
拷貝到sdcard上后還要再把可執(zhí)行文件拷到/system/bin目錄中,這需要有root權(quán)限的文件瀏覽器來做這件事。然后設(shè)置權(quán)限。我是用的terminal emulator,在shell中使用chmod命令加上可執(zhí)行權(quán)限。設(shè)置權(quán)限時(shí)會(huì)提示是只讀文件。我是用了es文件瀏覽器中的掛載system目錄為可寫文件系統(tǒng)的功能。先在es文件瀏覽器設(shè)置中勾上這個(gè)選項(xiàng),再在shell中操作。把配置文件pdnsd.conf拷到/etc或其它地方都可以。設(shè)置pdnsd.conf的權(quán)限,記得其它用戶的權(quán)限不能可寫。pdnsd運(yùn)行的時(shí)候會(huì)檢查,不允許其他用戶可寫。pdnsd.conf文件中有個(gè)cache文件存放目錄,默認(rèn)是在/var/cache/pdnsd,android沒有var這個(gè)目錄,要么自己建,要么改到其它地方。我在pdnsd.conf中設(shè)的是/cache/pdnsd。在/cache下建立pdnsd文件夾,再在下面建立一個(gè)pdnsd.cache的空文件。好像不先建好這個(gè)文件啟動(dòng)不了。
接下來運(yùn)行pdnsd。
在終端窗口中先su獲得root權(quán)限
再輸入pdnsd
如果先前沒改configure文件中的ac_default_prefix=/usr/local這句,pdnsd默認(rèn)配置文件在/usr/local/etc下,那就要手動(dòng)指定配置文件路徑。pdnsd -c /etc/pdnsd.conf。如果你的pdnsd.cache文件放在一個(gè)非root權(quán)限的目錄下,會(huì)有一個(gè)報(bào)錯(cuò)信息,不能綁定socket,沒有權(quán)限。不過pdnsd也不會(huì)中止,仍然可以用。只不過無法生成名為pdnsd.status的socket文件,pdnsd-ctl無法獲取pdnsd的狀態(tài)信息。我曾經(jīng)放在sdcard下的子目錄下,權(quán)限設(shè)了777都提示沒權(quán)限,文件夾屬主是system.sdcard_rw。后來放到/cache/下才成功,建議不要放到sdcard下面。
新開一個(gè)shell窗口,執(zhí)行netstat -an,可以看到127.0.0.1 udp 53端口在監(jiān)聽。yeah!!!看來成功了。
我使用dns changer這個(gè)軟件來設(shè)置dns,把dns設(shè)為本地地址:127.0.0.1。打開網(wǎng)頁瀏覽器,可以正常瀏覽。在shell下使用busybox nslookup google.com 127.0.0.1,可以獲取ip地址。用ls -l 查看緩存目錄/pdnsd.cache,可以看到pdnsd.cache文件在增大。

移植成功
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP