<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 干貨來(lái)嘍!實(shí)用樹(shù)莓派Linux編譯指南

干貨來(lái)嘍!實(shí)用樹(shù)莓派Linux編譯指南

發(fā)布人:13673998452 時(shí)間:2025-02-17 來(lái)源:工程師 發(fā)布文章

通常情況下,模組對接的Linux協(xié)議是USB協(xié)議,模組通過(guò)USB插入Linux設備后可直接使用,系統會(huì )檢測出設備的標識:PID VID。

然而實(shí)際運用中,時(shí)有新手朋友問(wèn):

Linux對新手用戶(hù)實(shí)在不友好,有沒(méi)有好的解決辦法?

今天來(lái)分享一下我的私藏干貨——樹(shù)莓派Linux編譯。編譯好之后,開(kāi)發(fā)板只需插到樹(shù)莓派上連接電腦就可以直接用了,極其方便。

本文以樹(shù)莓派為例,其他板子只要帶Linux系統的,大體上也都可以按這個(gè)操作。



一、燒錄鏡像


1.1 燒錄軟件

建議用樹(shù)莓派官方工具,可以直接設置添加SSH、樹(shù)莓派在路由器后臺的名字。

官方最新版下載地址:

https://www.raspberrypi.com/software/

wKgZO2dihiSASOeOAAMMNtBFK7E647.png

上方登錄的用戶(hù)名密碼,也可以一次性設置。


1.2 鏡像文件的下載


1.2.1 鏡像文件下載地址

鏡像文件,建議使用32位的,也可以使用64位的。

注意:如果想要使用可視化界面,下載鏡像時(shí)請選擇桌面版本的鏡像文件,最好是帶常用軟件的版本,還有盡量使用32位的,64位的我沒(méi)編譯成功過(guò)。

鏡像文件下載地址:

https://www.raspberrypi.com/software/operating-systems/


1.2.2 高速下載工具

如果下載進(jìn)度慢,可以先下載一個(gè)motrix,然后把下載鏈接用它打開(kāi)。

motrix下載地址:

https://motrix.app/zh-CN/


1.3 燒錄過(guò)程


下載完成后選擇使用自定義鏡像,然后插SD卡,燒錄就行。

wKgZPGdihjmAPEGaAAJE-E74bSI602.png

特別提醒:SD卡最好在32G及其以上,16G也行,但最好選擇速度快一點(diǎn)的SD卡,因為燒錄、寫(xiě)入,包括后面的編譯整個(gè)系統,都是在SD卡上完成的。



二、遠程控制


2.1 SSH方式


燒錄完成后,SD卡會(huì )被分成兩個(gè)區:

一個(gè)是無(wú)法打開(kāi)的系統區,一個(gè)是可以打開(kāi)的文件系統區。

如果你之前沒(méi)有在官方燒寫(xiě)工具里打開(kāi)SSH,需要用電腦打開(kāi)那個(gè)文件系統區,新建一個(gè)文件:名字叫做SSH,不要加任何文件名后綴。

新建好文件以后,將內存卡插入樹(shù)莓派中,路由器那接根網(wǎng)線(xiàn)給樹(shù)莓派,上電開(kāi)機,樹(shù)莓派官方推薦的電源為5V3A(注意:如果電源小于這個(gè),你帶的東西比較多還帶個(gè)屏幕的話(huà),會(huì )出現供電不穩導致的模組重啟等現象)。

接下來(lái),打開(kāi)你的路由器管理后臺,找到樹(shù)莓派。如果上一步你設置了樹(shù)莓派的名字,那么后臺還是比較好找的。如果沒(méi)設置的話(huà),樹(shù)莓派的默認名字為raspberry,root用戶(hù)默認密碼也為raspberry,如果長(cháng)期用樹(shù)莓派,建議分配一個(gè)靜態(tài)IP。

我這邊大概的管理界面如下:

wKgZO2dihk2AQDM0AAD9JHQZYKQ513.png

Xshell和Xftp下載地址:

www.xshell.com

打開(kāi)Xshell,新建登錄界面,IP選擇你在路由器后臺看到的樹(shù)莓派的IP,用戶(hù)名和密碼都是你之前用鏡像燒錄軟件設置的密碼。

如果沒(méi)有設置,用戶(hù)名為root,密碼為raspberry,如果實(shí)在登錄不上,建議重新燒錄,重新設置(Xshell和Xftp是配套軟件,建議一次都下載上)。

登錄上以后,建議使用sudo passwd命令,修改root用戶(hù)密碼,修改成你自己能記得住的。

Linux常見(jiàn)命令 :

wKgZO2dihlyABpOrAABP43UWFU0262.png


2.1.1 VNC遠程桌面

如果不太喜歡命令行方式,也可以使用VNC遠程桌面(類(lèi)似于PC上的向日葵)。

注:如果想要使用VNC,當時(shí)下載鏡像那一步的時(shí)候就要選擇桌面版本的鏡像文件,最好是帶常用軟件的版本。


PC端VNC下載:

https://www.realvnc.com/



三、直插屏幕式控制


你插個(gè)屏幕過(guò)去,所有的輸入輸出都使用鍵盤(pán)和鼠標完成也可以(注:如果想要使用屏幕,當時(shí)下載鏡像那一步的時(shí)候就要選擇桌面版本的鏡像文件,最好是帶常用軟件的版本)。

優(yōu)點(diǎn)嘛就是可視化,操作文件夾比較方便。

缺點(diǎn)就是在你圖形化修改驅動(dòng)文件的時(shí)候,可能會(huì )遇到驅動(dòng)文件是只讀文件,修改不成功,還得用命令行進(jìn)root用戶(hù)賦予文件/文件夾777權限(chmod -R 777 linux)。



四、樹(shù)莓派換源


因為樹(shù)莓派默認使用的國外的源,下載東西比較慢,編譯代碼時(shí)候需要的各種工具和包管理,所以可以使用清華/阿里/中科大等鏡像源。

使用SSH的用戶(hù),在命令行里輸入uname -m;使用VNC和直插桌面的用戶(hù),打開(kāi)命令行終端,一樣輸入uname -m。

然后按照這篇指導來(lái):

https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/

換源好了以后,可以嘗試輸入:

wKgZO2dihm6AauvRAAAf658BTU0899.png

換源可能遇到的問(wèn)題:

如果出現error,說(shuō)什么key什么找不到的,把報錯里key后面那串數字復制出來(lái),將這篇文章里的命令最后的那個(gè)key換成你的,如果報了多個(gè)key,那就設置多次。



五、編譯內核


編譯分為本地編譯和交叉編譯,這兩種方式都可以。本地編譯就是樹(shù)莓派自己編譯自己,交叉編譯就是用另一臺比樹(shù)莓派性能強大的機器(比如自己的電腦)去編譯驅動(dòng),編譯完進(jìn)行一個(gè)內核替換,將編譯好的內核替換到SD卡上,然后SD卡插回樹(shù)莓派。

本文僅講解本地編譯方式:


5.1 本地編譯

本地編譯的好處是不需要太多的命令,對新手玩家友好。

缺點(diǎn)就是受限于樹(shù)莓派孱弱的性能,編譯起來(lái)速度慢的要死。4個(gè)內核全開(kāi)的話(huà)編譯一次大概一兩個(gè)小時(shí)。如果使用的默認編譯指令,只開(kāi)一個(gè)核,我試過(guò)一次,大概4個(gè)小時(shí)多。


5.1.1 下載Linux內核源碼

打開(kāi)命令行,進(jìn)入你想要的目錄,比如桌面或者dowon,新建一個(gè)目錄也行,記得不要寫(xiě)中文,進(jìn)入后用下面這條命令下載樹(shù)莓派的最新內核。

wKgZO2dihn6AG9j-AAATQDax1fc480.png

-depth=1的意思類(lèi)似于淺拷貝,只clone當前項目下的代碼,沒(méi)有歷史文件的修改記錄。常見(jiàn)的git clone其實(shí)是深度拷貝,帶了從init這個(gè)倉庫以后的所有操作。

我們只是學(xué)習/編譯當前版本內核不需要看那些東西,全部拷貝過(guò)來(lái)的話(huà),大概3G多,不走代理下載到猴年馬月去了,即使走免費的代理,大多數也有最大倉庫2G的限制。

原始倉庫在下面這里,直接clone這個(gè)倉庫,慢的一批,所以走了熱心群友提供的代理路徑,詳細命令在后面,這里就不說(shuō)了。


樹(shù)莓派Linux倉庫:

https://github.com/raspberrypi/linux


5.1.2 修改我們驅動(dòng)對應的文件

如果使用的是SSH方式命令行修改,可以使用nano編輯器修改文件,記得先輸入su進(jìn)入超級用戶(hù),要不然修改可能會(huì )不成功。(注:大學(xué)接觸過(guò)Linux的話(huà),應該知道VI編輯器和VIM編輯器,都可以用,nano編輯器方便一點(diǎn)。)

具體命令如下:

wKgZPGdiho2ALgjuAAAOc7OSIZc543.png


5.1.2.1 option.c文件的修改

sudo  nano drivers/usb/serial/option.c

--使用nano編輯器進(jìn)入option.c文件

切記:進(jìn)入文件后,上下翻頁(yè)不要用鼠標,用鍵盤(pán)的上下按鍵!使用鼠標會(huì )導致對應文件里輸入一堆^H^L。


option.c文件里需要修改四處:


第一處:

static const struct usb_device_id option_ids[]函數的"{"下面加一句。

wKgZO2dihp2Ac76XAABmAv_FPNA998.png


第二處:

static struct usb_serial_driver option_lport_device函數,

最后一行,.resume = usb_wwan_resume,下面加一行。

wKgZO2dihquADWEOAAAfvgdUMaU139.png


第三處:

Struct usb_interface_descriptor那一行下面,加一句。

wKgZO2dihrmAG33aAAAOSSuk5Ls440.png


第四處:

If (iface_desc->bINterfaceClass一直到return -ENODEV;

這句話(huà)下面加這幾句:

wKgZO2dihsqAdUW-AAHaYRRxP2Y275.png

修改完成后,使用ctrl+o保存修改,ctrl+x退出文件編輯器。


5.1.2.2 usb_wwan.c文件的修改

一樣使用:

sudo nano drivers/usb/serial/usb_wwan.c

--使用nano編輯器打開(kāi)usb_wwan.c文件。


這個(gè)文件修改的地方只有一處:

static struct urb *usb_wwan_setup_urb函數,

在if (intfdata->use_zlp到PACKET;行后面,

加上如下幾句話(huà):

wKgZO2dihtuATEpQAAIeQ2nEekk709.png

修改完成后,使用ctrl+o保存修改,ctrl+x退出文件編輯器。

至此驅動(dòng)修改完成,可以進(jìn)入內核編輯界面了。主要是為了配置些沒(méi)有默認打開(kāi)的功能,比如ECM/PPP。


5.1.3 編譯前非代碼修改部分的準備工作

首先安裝Git和構建依賴(lài)項:

wKgZO2dihuyAX4STAAAMk5Bn1FE946.png

看清你手上的樹(shù)莓派版本以及下載的系統版本為32位還是64位,選擇下面對應的命令。

如果已經(jīng)在Linux目錄下了,就不用第一句cd linux了。


1)適用于樹(shù)莓派1、零和零W以及樹(shù)莓派計算模組1 ,默認(僅限 32 位)構建配置:

wKgZO2dihvqAU5qpAAARoNqDfuI174.png


2)適用于樹(shù)莓派2、3、3+ 和零2W,以及樹(shù)莓派計算模組 3 和 3+ ,默認32位構建配置:

wKgZO2dihweAVrcPAAAS3hcxmJo405.png


3)適用于樹(shù)莓派4和400,以及樹(shù)莓派計算模組4,默認的32位構建配置:

wKgZPGdihxOAXkc8AAASTmJOjzI508.png


4)適用于樹(shù)莓派3、3+、4、400和零2W以及樹(shù)莓派計算模組 3、3+ 和4,默認64位構建配置:

wKgZPGdihx-Aef65AAASFxXmqMk020.png


準備完成以后,就可以愉快地進(jìn)入內核配置界面了。

如果上述指令任意一條指令報錯,可自己百度解決,或咨詢(xún)合宙FAE。


5.1.4 內核配置

就在Linux這個(gè)路徑下,輸入:

wKgZO2dihyqAZW4PAAAH7o5tUBY460.png

進(jìn)入內核配置界面,如果進(jìn)不去,先確定下自己當前用戶(hù)是否是超級用戶(hù)。如果不是,輸入su進(jìn)入超級用戶(hù);然后再config。

進(jìn)入內核配置界面,按下"/",可以搜索想要改的地方。比如搜索RNDIS時(shí),如果相關(guān)配置項很多,這個(gè)界面下可以滾動(dòng)鼠標查看,確保搜索結果中與RNDIS相關(guān)的選項狀態(tài)為y或m:

wKgZPGdihzqAcesYAAK4NtsXwqc916.png

下面有寫(xiě)相關(guān)配置項的路徑:

wKgZO2dih0iAE53ZAADj2ps1acA874.png

ECM/PPP/CMUX同理,CMUX需要注意的是,搜索的是N_GSM:

wKgZO2dih1iAdMCBAAE6ugb0DTU306.pngwKgZPGdih2WAfr0jAANHf7qniYM236.png

可以選擇一個(gè)項目配置完就按左右選擇Save保存下配置,所有選項勾選完畢,點(diǎn)擊鍵盤(pán)的左右按鈕,選擇Exit,直到退出到彈出對話(huà)框問(wèn)你是否保存,選擇yes保存完畢,就結束了所有配置工作。


5.1.5 構建內核

生成并安裝內核、模組和設備樹(shù)blob。此步驟可能需要很長(cháng)時(shí)間,具體取決于所使用的樹(shù)莓派模型。

對于32位內核:

wKgZO2dih3aAe9xbAABCjXOWMLI754.png

對于64位內核:

wKgZPGdih4OAK2BTAABGc9YrJHk359.png

注1:第一句make后面的V=1為編譯時(shí)候看的日志等級為1級,日志最多為S級,不加這個(gè)V=1可能看不到你修改的驅動(dòng)哪里有問(wèn)題;

注2:-j4為啟動(dòng)4個(gè)內核一起編譯。


記得給樹(shù)莓派拿個(gè)風(fēng)扇懟著(zhù)散熱,會(huì )很燙。

wKgZO2dih5WAMhEgABHPQvrJ-xo840.png

所有的項目完成以后,現在重新啟動(dòng),你的樹(shù)莓派應該運行你新編譯的內核!

wKgZO2dih6OAZTQnAAAILaFE7Zo997.png

給樹(shù)莓派插入Air724/Air780E/1802/1603系列的板子,開(kāi)機以后,輸入:

wKgZO2dih66AE4_BAAAQKYKd1dU621.png

就能看見(jiàn)三個(gè)端口:

wKgZPGdih8iAPwaPAAj4I6Og6Rk645.png

注1:這三個(gè)端口是Linux自己分配的,端口號可能不固定,如果想要固定端口號,可以使用這個(gè)鏈接里提到的方案:

https://doc.openluat.com/article/2080/0

注2:618可能會(huì )出現不叫ttyUSB的端口,可能叫ttyACM,也有可能是其他:

wKgZO2dih96AFdykAAqc3k_nrBo520.png

Linux下的串口調試工具很多,最知名的就是minicom,簡(jiǎn)單使用方式在下面:

wKgZO2dih-2Acoo5AAAOCF625Rk631.png

我個(gè)人覺(jué)得不好用,所以我用的是我們自己寫(xiě)的一個(gè)串口工具,使用方法如下:

https://doc.openluat.com/article/645/0

wKgZPGdih_-AJqdyAAAIRrtEolY726.png

編譯完成后,在目錄下會(huì )生成一個(gè)at.out的可執行文件,使用示例:

wKgZPGdiiAaAYtDFAAAUfN4sjBo281.png



5.2 編譯完可能出現的問(wèn)題


5.2.1 找不到端口

如果lsusb可以顯示出來(lái)對應模組的PID VID,但是找不到那幾個(gè)虛擬串口。


解決方法:發(fā)送命令 

1)8910系列

Air724UG/720UH/720UG/722UG/820UG/600UG…

發(fā)這個(gè):

wKgZO2diiBeALCbrAAAOzYXRZFI151.png


2)618系列

Air780E/780EX/780EG/600E/780EA/600EA/700E…

發(fā)這個(gè):

wKgZPGdiiCWAA-38AAARKSB6fQo868.png

然后再去找下端口,如果能找到,則證明PID VID修改未成功,重新從5.1.1開(kāi)始做起。

如果lsusb找不到對應端口,先確定下模組開(kāi)機vdd_ext有沒(méi)有電壓。如果沒(méi)有,powerkey接地,vbat供電4V;如果有,建議給vbus DM DP gnd四個(gè)飛線(xiàn)出來(lái),接一根USB線(xiàn)給Win10電腦。模組開(kāi)機以后,看看Win10電腦上有沒(méi)有三個(gè)端口。


5.2.2 端口顯示異常 

lsusb顯示的端口為17d1 0001,并非19d1 0001。


解決方法:

17D1 0001為618模組進(jìn)入boot后Linux顯示的端口號,通常情況下,重新給618模組開(kāi)機一次即可解決。

如果開(kāi)機后依舊顯示17D1 0001端口,則證明vdd_ext引腳和uboot引腳短接在了一起,或者uboot引腳接入了其他高電平引腳如3.3V或者vbat引腳。

---

樹(shù)莓派Linux編譯及系列模組的使用方法,就先分享到這里了~


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。




相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>