最近在pcDuino上做AP的功能的,但是內(nèi)核不支持NAT,需要改內(nèi)核,添加wifi驅(qū)動,這里把內(nèi)核開發(fā)的方法分享給大家,方便大家以后學(xué)習(xí)調(diào)試其他的驅(qū)動。 一,搭建交叉開發(fā)環(huán)境 按照傳統(tǒng)的開發(fā)方法,我們需要下載交叉編譯器,設(shè)置環(huán)境變量,有些時(shí)候交叉編譯器還不能用,等等一些問題。在pcDuino上搭建很簡單: 1,在電腦安裝ubuntu系統(tǒng),虛擬機(jī)或者硬盤安裝都行,具體的安裝過程我就不在這里贅述了; 2,sudo apt-get update #更新一下軟件源; 3,sudo apt-get upgrade # 更新一下系統(tǒng); 4,sudo apt-get install g++-arm-linux-guneabihf #安裝交叉編譯器,安裝的過程會設(shè)置好系統(tǒng)的交叉編譯環(huán)境 二,下載pcduino內(nèi)核源碼 構(gòu)建pcDuino系統(tǒng)所有的源碼都在https://github.com/pcduino/kernel里面,我們只需要安裝git下載下來就可以了。 1,sudo apt-get install git-core #下載安裝git工具 2,git clone https://github.com/pcduino/kernel.git #下載所有源碼 這個(gè)源碼比較大加上git管理有2G左右,而且還不斷增加中。這里需要找個(gè)安靜的網(wǎng)絡(luò),可以長時(shí)間下載。下載后源碼如圖所示: 三,編譯內(nèi)核源碼 linux-sunxi目錄就是內(nèi)核源碼目錄,我們到這個(gè)目錄下: make mrproper #深度清除以前的配置 回到kernel目錄下 make 第一次編譯可能會出現(xiàn)一下問題: 1,提示有些.c文件找不到,其實(shí)這些文件是有的,按照提示,你到出現(xiàn)錯(cuò)誤的目錄里面去找,其實(shí)那個(gè).c文件被加了其他的后綴,把后綴去掉可以了。 2,提示找不到工具mkimage ,這個(gè)工具是在編譯u-boot的時(shí)候生成的所以你需要到 /home/pillar/WORK/kernel/build/pcduino-u-boot/tools 目錄下,把mkimag拷貝到/usr/bin/目錄下 除了以上問題應(yīng)該沒有其他的問題了。 四,配置Linux內(nèi)核 傳統(tǒng)的方法是到Linux 內(nèi)核源碼下面執(zhí)行make menuconfig 由于pcDuino把整個(gè)工程都包裝的很好,這里就不能到內(nèi)核源碼目錄下執(zhí)行了 由于Linux內(nèi)核源碼的圖像化界面是基于ncurses庫的,所以這里需要安裝那個(gè)庫 ‘sudo apt-get install libncurses5-dev 安裝完畢后,切換到/home/pillar/WORK/kernel/build/sun4i_defconfig-linux/下 make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig
這樣就看到了久違的Linux內(nèi)核配置界面了。 配置完成后保存退出 執(zhí)行 ls -a 命令就可以看到當(dāng)前目錄下隱藏的,config 文件 從底層的Makefile分析可以知道,編譯的時(shí)候并不是讀取這個(gè)目錄下的.config cp .config /home/pillar/WORK/kernel/patch/linux-sunxi/arch/arm/configs/sun4i_defconfig 這樣就會編譯我們配置的內(nèi)核。 五,在內(nèi)核中添加驅(qū)動 這里我以添加雷凌的rt5370 USB wifi驅(qū)動為例介紹如何在內(nèi)核中添加驅(qū)動。具體的內(nèi)核驅(qū)動開發(fā)學(xué)習(xí)過程,請關(guān)注我后期的博客。 拷貝已經(jīng)開發(fā)好的rt5370驅(qū)動到 /home/pillar/WORK/kernel/linux-sunxi/drivers/net/wireless 修改該目錄下的Kconfig 文件,在文件的最后添加一下內(nèi)容 source “drivers/net/wireless/rtxx7x/Kconfig” 修改該目錄下的Makefile文件,在文件的最后加上一下內(nèi)容 obj-$(CONFIG_RTXX7X_SW) += rtxx7x/ 最后在剛才介紹的目錄下安裝剛介紹的命令配置內(nèi)核,在內(nèi)核的 Device Drivers —> [*] Network device support —> [*] Wireless LAN —> <M> Ralink 3070/3370/5370/5372 USB WiFi for SW
選擇M表示是動態(tài)加載,編譯完成之后會生成ko文件,你直接把它拷貝到文件系統(tǒng),然后執(zhí)行 insmod *.ko 就可以了,或者你選擇*,這樣就會編譯進(jìn)內(nèi)核。 六,燒寫剛剛修改過的內(nèi)核 pcDuino提供了一個(gè)很簡單的方式修改內(nèi)核,告別了傳統(tǒng)的TF卡,USB等等設(shè)備 編譯生成的內(nèi)核文件在 /home/pillar/WORK/kernel/build/sun4i_defconfig-linux/arch/arm/boot 目錄下,我只需要用U盤拷貝到pcDuino上,或者你沒有U盤執(zhí)行以下命令就可以直接拷貝過去了 scp uImage root@192.168.3.101:/home/ubuntu/ 當(dāng)然你執(zhí)行這個(gè)命令你需要在pcduino上執(zhí)行一下命令安裝SSH sudo apt-get install openssh-server openssh-client 回到pcDuino,我們可以在/home/ubuntu/看到剛才的uImage,執(zhí)行以下命令就可以直接將剛才修改的內(nèi)核燒寫到pcDuino上: sudo mount /dev/nanda /boot sudo cp uImage /boot -f sudo cp evb.bin /boot -f sudo reboot 這個(gè)evb.bin你需要到pcDuino的官網(wǎng)www.pcduino.com上面去下載。 這樣內(nèi)核就燒寫完成了。 pcDuino很多驅(qū)動都是動態(tài)加載的,因此內(nèi)核里面是沒有驅(qū)動那些驅(qū)動的,你需要把剛才編譯生成的驅(qū)動拷貝到當(dāng)前的文件系統(tǒng)中來。驅(qū)動生成的目錄如下: /home/pillar/WORK/kernel/output 這個(gè)目錄里面有a10_hwpack_20130417.tar.xz包,具體包的名字會根據(jù)當(dāng)前日期來定。 把這個(gè)包拷貝到pcDuino上解壓,解壓后rootfs/lib/modules里面的3.4.29+里面都是ko文件,你只需替換到當(dāng)前就可以了 首先到pcDuino的/lib/modules目錄下刪掉原來的驅(qū)動,新驅(qū)動和原來的是不兼容的,然后把剛才的3.4.29+拷貝到過來。 這里很多東西需要都需要手動加載,比如你想用USB wifi 你需要到net/wireless下執(zhí)行 insmod rt5370sta.ko 這樣驅(qū)動就加進(jìn)去了,你的wifi模塊就可以用了。 |
|