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