RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在linux下搭建rtthread_qemu系統(tǒng)

冬至子 ? 來源:LICDCD ? 作者:LICDCD ? 2023-11-21 14:40 ? 次閱讀

1.獲取RT-Thread以及env工具

1.1 源碼包獲取

RT-Thread源碼的獲取方式有多種,可以是官網(wǎng)瀏覽器下載、云盤下載、git獲取,強(qiáng)烈推薦git,因?yàn)槭褂胓it可以很方便的切換各種版本的rtthread,但是前提是要先安裝git,linux下的安裝方法不多敘述。這里不推薦拷貝windows系統(tǒng)里面的源碼包,因?yàn)閣indows與linux的文件換行符等差異,會(huì)導(dǎo)致各種坑,所以還是老老實(shí)實(shí)的重新下載源碼包吧。

git方式國內(nèi)建議使用gitee。

在終端輸入

git clone http://gitee.com/rtthread/rt-thread.git

即可獲取rtthread最新版的源碼包,但是由于兼容問題不太推薦最新的包,終端輸入cd rt-thread 進(jìn)入源碼包后,使用git reset —hard + 某舊版本id可以快速切換到改舊版本的源碼包,以4.1.1為例,在終端輸入

git reset --hard aab2428d4177a02cd3b0fd020e47a88de379a6ab

版本的id號(hào)可以通過 git log查看,commit后的就是該版本

1.jpg

1.2 env工具

對(duì)于中國大陸用戶,請(qǐng)使用以下三行命令進(jìn)行下載,第一行是下載,第二行修改權(quán)限,第三行安裝

wget https://gitee.com/RT-Thread-Mirror/env/raw/master/install_ubuntu.sh
chmod 777 install_ubuntu.sh
./install_ubuntu.sh --gitee
Prepare Env
PLAN A: Whenever start the ubuntu system, you need to type command source ~/.env/env.sh to activate the environment variables.

or PLAN B: open ~/.bashrc file, and attach the command source ~/.env/env.sh at the end of the file. It will be automatically executed when you log in the ubuntu, and you don’t need to execute that command any more.

意思就是有兩種方法來配置env,推薦第二種,輸入

gedit ~/.bashrc
再在文件最后一行輸入source ~/.env/env.sh

1.3 編譯調(diào)試所需工具

除此之外,需安裝編譯工具gcc-arm-none-eabi、scons、gdb調(diào)試工具等,輸入以下指令下載安裝

sudo apt-get install gcc-arm-none-eabi
sudo apt-get install qemu-system-arm
sudo apt-get install scons
sudo apt-get install binutils-arm-none-eabi
通常編譯器都自動(dòng)安裝到/usr/bin下了,安裝好之后需進(jìn)入rt-thread/bsp/qemu-vexpress-a9,打開rtconfig.py文件,37行左右會(huì)指定編譯工具,設(shè)置為gcc,路徑為/usr/bin

PLATFORM = 'gcc'
EXEC_PATH = r'/usr/bin'

2.運(yùn)行QEMU看看效果

在windows下是運(yùn)行qemu.bat,linux下則是qemu.sh。進(jìn)入到rt-thread/bsp/qemu-vexpress-a9下,輸入

./qemu.sh
即可啟動(dòng)虛擬的開發(fā)板。如果運(yùn)行不了qemu.sh,則需要使用

chmod +x qemu.sh
為該文件增加“可執(zhí)行”的屬性。

如果還是運(yùn)行不了,可能是沒有生成rtthread.elf的文件,qemu.sh腳本里面就一句話,作用是使用qemu創(chuàng)建機(jī)器,運(yùn)行rtthread.elf。

輸入scons可編譯工程生成rtthread.elf

運(yùn)行效果如下圖,已經(jīng)進(jìn)入了虛擬開發(fā)板的命令行界面。

1.jpg

輸入 Ctrl + c 可退出

3.修改main.c并編譯運(yùn)行

打開rt-thread/bsp/qemu-vexpress-a9/application下的main.c,可以看到如下內(nèi)容,經(jīng)典的hello world

#include
#include
#include
int main(void)
{
printf("Hello RT-Thread!n");
return 0;
}
嘗試修改一下,printf(“Hello RT-Thread this is a test n”);

保存后,再linux終端rt-thread/bsp/qemu-vexpress-a9/目錄下,輸入scons,工程便開始編譯

1.jpg

最終提示生成了rtthread.elf文件。運(yùn)行./qemu.sh,可以看到啟動(dòng)后打印修改的內(nèi)容

1.jpg

4.搭建VSCode,開發(fā)更方便

很多人不習(xí)慣使用vi編輯器、gedit編輯器修改文件,不習(xí)慣使用gdb進(jìn)行調(diào)試(我就是),搭建VSCode是很有必要的,看代碼很方便,調(diào)試界面也很友好。

VSCode的下載安裝不多作介紹,簡介就是宇宙最強(qiáng)萬能寫代碼工具。

這里還要借助VSCode里面的插件: RT-Thread Studio

1.jpg

安裝好之后,按照擴(kuò)展設(shè)置,添加幾個(gè)必要的路徑:

1.rtthread源碼包路徑

2.gdb路徑:/usr/bin/arm-none-eabi-gdb

3.Toolchain_Loacation工具鏈 gcc編譯器的路徑:/usr/bin

使用左側(cè)的RT按鈕,即可打開一個(gè)工程。鼠標(biāo)懸停再工程上,可看到編譯、調(diào)試等選項(xiàng):

1.jpg

如此,就很方便了。調(diào)試起來毫無壓力。

1.jpg

5.為QEMU增加網(wǎng)卡

到這里,基本的環(huán)境就已經(jīng)搭建好了。但是需要使用更多的接口,還需要了解以下QEMU。

QEMU的本質(zhì)是使用電腦硬件,虛擬出一個(gè)開發(fā)板,也就是說這個(gè)開發(fā)板使用的接口實(shí)際上都是你的電腦的接口。

這一步,為QEMU增加網(wǎng)卡。根據(jù)RT-Thread文檔中心的指引,在windows下使用qemu,添加網(wǎng)卡是首先安裝一個(gè)虛擬網(wǎng)卡,然后將真實(shí)的可上網(wǎng)的網(wǎng)卡共享到虛擬網(wǎng)卡,然后再啟動(dòng)虛擬開發(fā)板的時(shí)候設(shè)置啟動(dòng)參數(shù),將虛擬網(wǎng)卡作為啟動(dòng)項(xiàng),當(dāng)作虛擬開發(fā)板的網(wǎng)卡。

Linux中也是如此。大概的示意圖如下圖所示。

1.jpg

需要先安裝網(wǎng)橋軟件包

sudo apt-get install bridge-utils
sudo apt-get install uml-utilities
參照網(wǎng)上的例子改寫了qemu.sh,如下。其中ens33和ens36為我電腦上的兩個(gè)網(wǎng)卡,一個(gè)是以太網(wǎng)(VMware實(shí)體window和linux虛擬機(jī)NET模式),一個(gè)是WIFI(VMware橋接模式,linux和windows共用wifi)。

if [ ! -f "sd.bin" ]; then
dd if=/dev/zero of=sd.bin bs=1024 count=65536
fi
#檢測是否可上網(wǎng)
function network()
{
local ret_code=curl -I -s --connect-timeout 1 www.baidu.com -w %{http_code} | tail -n1
if [ "x$ret_code" = "x200" ]; then
return 1 #網(wǎng)絡(luò)暢通
else
return 0 #不通
fi
return 0
}
network
if [ $? -eq 0 ];then
echo "網(wǎng)絡(luò)不通暢" #不使用dhcp
sudo ifconfig ens33 down
if [ ! -d /sys/class/net/br0 ];then
sudo brctl addbr br0 #添加名為br0的網(wǎng)橋
sudo brctl addif br0 ens33 #網(wǎng)橋上添加接口ens33
sudo brctl stp br0 off #關(guān)閉生成樹協(xié)議
sudo brctl setfd br0 1 #設(shè)置轉(zhuǎn)發(fā)延遲
sudo brctl sethello br0 1 #設(shè)置hello時(shí)間
fi
sudo ifconfig br0 192.168.75.12 promisc up #啟用br0接口
sudo ifconfig ens33 192.168.75.128 promisc up #啟用網(wǎng)卡接口
sudo dhclient br0 #從dhcp服務(wù)器獲得br0IP地址
sudo brctl show br0 #查看虛擬網(wǎng)橋列表
sudo brctl showstp br0 #查看br0各接口信息
tunctl -t tap0 -u root
brctl addif br0 tap0
ifconfig tap0 0.0.0.0 promisc up
brctl showstp br0
else
sudo ifconfig ens36 down #關(guān)閉能連接的主機(jī)網(wǎng)卡
if [ ! -d /sys/class/net/br0 ];then
sudo brctl addbr br0 #添加名為br0的網(wǎng)橋
sudo brctl addif br0 ens36 #網(wǎng)橋上添加接口ens36
sudo brctl stp br0 off #關(guān)閉生成樹協(xié)議
sudo brctl setfd br0 1 #設(shè)置轉(zhuǎn)發(fā)延遲
sudo brctl sethello br0 1 #設(shè)置hello時(shí)間
fi
sudo ifconfig br0 0.0.0.0 promisc up #啟用br0接口
sudo ifconfig ens36 0.0.0.0 promisc up #啟用網(wǎng)卡接口
sudo dhclient br0 #從dhcp服務(wù)器獲得br0IP地址
sudo brctl show br0 #查看虛擬網(wǎng)橋列表
sudo brctl showstp br0 #查看br0各接口信息
tunctl -t tap0 -u root
brctl addif br0 tap0
ifconfig tap0 0.0.0.0 promisc up
brctl showstp br0
fi
sudo qemu-system-arm
-M vexpress-a9
-smp cpus=2
-kernel rtthread.bin
-serial stdio
-sd sd.bin
-net nic -net tap,ifname=tap0

修改完之后,保存,運(yùn)行qemu.sh,在rtthread終端ping一個(gè)網(wǎng)站即可ping通,到此就可以進(jìn)行下一步學(xué)習(xí)了。B站上RTThread官方賬號(hào)有網(wǎng)絡(luò)課程專欄【7天入門網(wǎng)絡(luò)編程】,搭配使用真香。若ping不通則有可能是你的linux系統(tǒng)本身就上不了網(wǎng),所以網(wǎng)橋一定要連接到可以上網(wǎng)的網(wǎng)卡才能往下走。ping不通移步第6節(jié) VMWare虛擬機(jī)網(wǎng)卡配置簡介,參考一下我的配置。

1.jpg

此時(shí)啟動(dòng)另一個(gè)終端,輸入ifconfig,可以看到網(wǎng)卡的信息,里面有qemu.sh文件里新建的br0網(wǎng)橋、本機(jī)網(wǎng)卡ens33、ens36、lo回環(huán)、tap0虛擬網(wǎng)卡

1.jpg

2.jpg

6.VMWare虛擬機(jī)網(wǎng)卡配置簡介

以下給出我的參考配置

在windows平臺(tái)下使用VMware,windos下網(wǎng)絡(luò)適配器為如下配置,其中WLAN就是可以上網(wǎng)的Wifi,虛擬網(wǎng)卡VMnet8用于NET模式進(jìn)行windows和Ubuntu的文件共享、SSH等

1.jpg

在虛擬機(jī)設(shè)置里面使用VMnet8和VMnet0,其中VMnet8設(shè)置為NAT模式,VMnet0設(shè)置為自定義橋接模式。在虛擬網(wǎng)絡(luò)編輯器里設(shè)置VMnet0橋接目標(biāo)為我的WIFI,即RZ608 Wi-Fi 6E 80MHz。

1.jpg

2.jpg

設(shè)置完成后,在Ubuntu中使用ifconfig就可以看到這兩個(gè)網(wǎng)卡了,或者在圖形界面中也可以設(shè)置,但是Ubuntu都認(rèn)為這兩個(gè)網(wǎng)卡都是有線網(wǎng)卡

1.jpg

這時(shí)在去ping一個(gè)網(wǎng)站就可以ping通了,如果ping不通可以嘗試關(guān)閉再重新打開。

7.TCP客戶端示例

演示TCP客戶端示例。

在windows下打開一個(gè)TCP服務(wù)器(咱也不知道為什么用windows,正好電腦上有,用著方便)

1.jpg

在RT-Thread命令行中輸入tcp_client命令 + 服務(wù)器IP +服務(wù)器端口號(hào)

msh /> tcp_client 192.168.75.1 7001

1.jpg

2.jpg

源碼見文末尾,該源碼包通過sons —menuconfig彈出裁剪配置界面,添加

RT-Thread online packages ---->
miscellaneous packages ---->
samples:kernel and components samples --->
a network_samples package for rt-thread ---->
[network] tcp client
即可獲得,添加完成之后,在終端輸入

pkgs --update
自動(dòng)下載TCP示例源代碼,然后直接scons編譯即可使用

/*

Copyright (c) 2006-2022, RT-Thread Development Team

SPDX-License-Identifier: Apache-2.0

Change Logs:
Date Author Notes

/
/

程序清單:tcp 客戶端

這是一個(gè) tcp 客戶端的例程
導(dǎo)出 tcpclient 命令到控制終端
命令調(diào)用格式:tcpclient URL PORT
URL:服務(wù)器地址 PORT::端口號(hào)
程序功能:接收并顯示從服務(wù)端發(fā)送過來的信息,接收到開頭是 'q' 或 'Q' 的信息退出程序
/
#include
#include /
使用BSD socket,需要包含socket.h頭文件 /
#include
#include
#include
#include
#define BUFSZ 1024
static const char send_data[] = "This is TCP Client from RT-Thread."; /
發(fā)送用到的數(shù)據(jù) */
static void tcpclient(int argc, char **argv)
{
int ret;
char *recv_data;
struct hostent *host;
int sock, bytes_received;
struct sockaddr_in server_addr;
const char url;
int port;
if (argc < 3)
{
rt_kprintf("Usage: tcpclient URL PORTn");
rt_kprintf("Like: tcpclient 192.168.12.44 5000n");
return ;
}
url = argv[1];
port = strtoul(argv[2], 0, 10);//第2個(gè)參數(shù)字符串轉(zhuǎn)為整形 端口號(hào)
/
通過函數(shù)入口參數(shù)url獲得host地址(如果是域名,會(huì)做域名解析) /
host = gethostbyname(url);
/
分配用于存放接收數(shù)據(jù)的緩沖 /
recv_data = rt_malloc(BUFSZ);
if (recv_data == RT_NULL)
{
rt_kprintf("No memoryn");
return;
}
/
創(chuàng)建一個(gè)socket,類型是SOCKET_STREAM,TCP類型 /
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
/
創(chuàng)建socket失敗 /
rt_kprintf("Socket errorn");
/
釋放接收緩沖 /
rt_free(recv_data);
return;
}
/
初始化預(yù)連接的服務(wù)端地址 */
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr = *((struct in_addr )host->h_addr);
rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));
/
連接到服務(wù)端 */
if (connect(sock, (struct sockaddr )&server_addr, sizeof(struct sockaddr)) == -1)
{
/
連接失敗 */
rt_kprintf("Connect fail!n");
closesocket(sock);
/*釋放接收緩沖 /
rt_free(recv_data);
return;
}
else
{
/
連接成功 /
rt_kprintf("Connect successfuln");
}
while (1)
{
/
從sock連接中接收最大BUFSZ - 1字節(jié)數(shù)據(jù) /
bytes_received = recv(sock, recv_data, BUFSZ - 1, 0);
if (bytes_received < 0)
{
/
接收失敗,關(guān)閉這個(gè)連接 /
closesocket(sock);
rt_kprintf("nreceived error,close the socket.rn");
/
釋放接收緩沖 /
rt_free(recv_data);
break;
}
else if (bytes_received == 0)
{
/
默認(rèn) recv 為阻塞模式,此時(shí)收到0認(rèn)為連接出錯(cuò),關(guān)閉這個(gè)連接 /
closesocket(sock);
rt_kprintf("nreceived error,close the socket.rn");
/
釋放接收緩沖 /
rt_free(recv_data);
break;
}
/
有接收到數(shù)據(jù),把末端清零 /
recv_data[bytes_received] = '?';
if (strncmp(recv_data, "q", 1) == 0 || strncmp(recv_data, "Q", 1) == 0)
{
/
如果是首字母是q或Q,關(guān)閉這個(gè)連接 /
closesocket(sock);
rt_kprintf("n got a 'q' or 'Q',close the socket.rn");
/
釋放接收緩沖 /
rt_free(recv_data);
break;
}
else
{
/
在控制終端顯示收到的數(shù)據(jù) /
rt_kprintf("nReceived data = %s ", recv_data);
}
/
發(fā)送數(shù)據(jù)到sock連接 /
ret = send(sock, send_data, strlen(send_data), 0);
if (ret < 0)
{
/
接收失敗,關(guān)閉這個(gè)連接 /
closesocket(sock);
rt_kprintf("nsend error,close the socket.rn");
rt_free(recv_data);
break;
}
else if (ret == 0)
{
/
打印send函數(shù)返回值為0的警告信息 */
rt_kprintf("n Send warning,send function return 0.rn");
}
}
return;
}
MSH_CMD_EXPORT(tcpclient, a tcp client sample);

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9084

    瀏覽量

    367378
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    593

    瀏覽量

    27392
  • gcc編譯器
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    3378
  • RTThread
    +關(guān)注

    關(guān)注

    8

    文章

    132

    瀏覽量

    40859
  • qemu
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    5354
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    添加Linux系統(tǒng)調(diào)用與利用QEMU測試

    添加Linux系統(tǒng)調(diào)用與利用QEMU測試
    發(fā)表于 10-01 12:19 ?732次閱讀
    添加<b class='flag-5'>Linux</b><b class='flag-5'>系統(tǒng)</b>調(diào)用與利用<b class='flag-5'>QEMU</b>測試

    手把手教你Ubuntu系統(tǒng)中通過QEMU來運(yùn)行基于Arm CPU的Linux系統(tǒng)

    怎樣去安裝QEMU?如何去編譯U-Boot?怎樣Ubuntu系統(tǒng)中通過QEMU來運(yùn)行基于Arm CPU的Linux
    發(fā)表于 08-19 06:57

    如何使用QEMU搭建u-boot+Linux+NFS嵌入式開發(fā)環(huán)境呢

    使用QEMU搭建u-boot+Linux+NFS嵌入式開發(fā)環(huán)境1、搭建嵌入式基本開發(fā)環(huán)境2、QEMU安裝3、編譯
    發(fā)表于 11-05 08:21

    虛擬機(jī)搭建Windows和Unix系統(tǒng)

    虛擬機(jī)搭建Windows和Unix系統(tǒng),大家都很熟悉,那么搭建arm嵌入式系統(tǒng)估計(jì)大家比較少聽說。按照以往的慣例,我們會(huì)使用
    發(fā)表于 12-22 06:49

    分享一種基于qemu的arm-linux虛擬機(jī)搭建方法

    環(huán)境搭建-2 用busybox搭建 一樣,如果覺得制作麻煩,我dropbox上給出了制作好了的文件系統(tǒng)壓縮包,下載下來之后解壓到 busybox.img 里面即可。至此,
    發(fā)表于 05-30 10:34

    Ubuntu平臺(tái)開發(fā)RT-Thread文檔中步驟搭建QEMU環(huán)境

    NimBLE 可在 QEMU 環(huán)境搭配藍(lán)牙 Control 芯片運(yùn)行,目前 Ubuntu 18.04 運(yùn)行成功。QEMU 環(huán)境
    發(fā)表于 07-27 11:19

    一鍵搭建ubuntu rtthread qemu編譯環(huán)境

    rtthread編譯環(huán)境,經(jīng)常有一些剛?cè)腴T的小伙伴對(duì)于搭環(huán)境遇到各種各樣的問題,又要看文檔,又要env。麻煩,如果想先嘗試一,可以參考這篇文章。對(duì)于習(xí)慣使用linux和服務(wù)器的人來
    發(fā)表于 12-22 09:22

    基于QEMU系統(tǒng)模擬器Xilinx/QEMU的運(yùn)行與調(diào)試

    Xilinx基于QEMU系統(tǒng)模擬器Xilinx/QEMU可用于模擬運(yùn)行Zynq Linux的運(yùn)行與調(diào)試。
    的頭像 發(fā)表于 07-04 07:50 ?9154次閱讀

    搭建測試環(huán)境常用linux命令_linuxweb測試環(huán)境的搭建

    本文主要介紹的是搭建測試環(huán)境常用的一些linux命令以及linuxweb測試環(huán)境的搭建。
    的頭像 發(fā)表于 01-31 18:41 ?1.2w次閱讀
    <b class='flag-5'>搭建</b>測試環(huán)境常用<b class='flag-5'>linux</b>命令_<b class='flag-5'>linux</b><b class='flag-5'>下</b>web測試環(huán)境的<b class='flag-5'>搭建</b>

    你知道linux搭建lua腳本語言的編程環(huán)境?

    lua是腳本語言的一種,具體的該腳本的介紹可百度,本文介紹Linux系統(tǒng)搭建lua編程環(huán)境的步驟,以及
    發(fā)表于 05-16 16:25 ?3691次閱讀
    你知道<b class='flag-5'>在</b><b class='flag-5'>linux</b><b class='flag-5'>下</b><b class='flag-5'>搭建</b>lua腳本語言的編程環(huán)境?

    LinuxQEMU調(diào)試內(nèi)核的步驟

    LinuxQEMU調(diào)試內(nèi)核的步驟
    的頭像 發(fā)表于 06-23 09:03 ?3145次閱讀
    <b class='flag-5'>Linux</b>:<b class='flag-5'>QEMU</b>調(diào)試內(nèi)核的步驟

    LinuxQEMU的網(wǎng)絡(luò)配置

    。/linux-3.2/arch/arm/boot/zImage -initrd 。./initramfs -serial stdio -append 5.配置 qemu的網(wǎng)絡(luò): 主機(jī)和虛擬機(jī)之間可以相互ping通了。
    的頭像 發(fā)表于 06-23 09:22 ?6809次閱讀
    <b class='flag-5'>Linux</b>:<b class='flag-5'>QEMU</b>的網(wǎng)絡(luò)配置

    Linux:使用 QEMU 測試 U-BOOT的步驟

    Linux:使用 QEMU 測試 U-BOOT的步驟
    的頭像 發(fā)表于 06-23 09:42 ?3387次閱讀
    <b class='flag-5'>Linux</b>:使用 <b class='flag-5'>QEMU</b> 測試 U-BOOT的步驟

    如何搭建一個(gè)用于學(xué)習(xí)linuxQEMU環(huán)境?

    QEMU/虛擬化的原理解讀,而是如何搭建一個(gè)用于學(xué)習(xí)linuxQEMU環(huán)境,當(dāng)然對(duì)于Linux內(nèi)核的學(xué)習(xí)這已經(jīng)足夠了。 注:這篇文章是之前寫的
    的頭像 發(fā)表于 05-21 09:17 ?3764次閱讀

    使用qemu搭建arm嵌入式linux開發(fā)環(huán)境

    命令行輸入以下內(nèi)容安裝ARM交叉編譯工具:sudo apt-get install gcc-arm-linux-gnueabi安裝qemu:sudo apt-get install qemu
    發(fā)表于 11-01 16:32 ?20次下載
    使用<b class='flag-5'>qemu</b><b class='flag-5'>搭建</b>arm嵌入式<b class='flag-5'>linux</b>開發(fā)環(huán)境
    RM新时代网站-首页