最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

基于imx8m plus開發(fā)板全體系開發(fā)教程2:源碼編譯、燒錄、鏡像運(yùn)行

2023-03-30 15:44 作者:華清遠(yuǎn)見研發(fā)中心  | 我要投稿

前言:

i.MX8M Plus 開發(fā)板是一款擁有 4 個(gè) Cortex-A53 核心,運(yùn)行頻率 1.8GHz;1 個(gè) Cortex-M7 核心,運(yùn)行頻率 800MHz;此外還集成了一個(gè) 2.3 TOPS 的 NPU,大大加速機(jī)器學(xué)習(xí)推理。

全文所使用的開發(fā)平臺(tái)均為與NXP官方合作的FS-IMX8MPCA開發(fā)板(華清遠(yuǎn)見imx8mp開發(fā)板),支持Weston、ubuntu20.04、Android11 等操作系統(tǒng);同時(shí)支持 Xenomai 硬實(shí)時(shí)內(nèi)核、EtherCAT 總線、TSN 時(shí)間敏感網(wǎng)絡(luò)、ROS1.0、ROS2.0 等工業(yè)與機(jī)器人領(lǐng)域應(yīng)用;可以用于工業(yè)互聯(lián)網(wǎng)、人工智能、邊緣計(jì)算、多屏異顯等應(yīng)用方向。華清遠(yuǎn)見研發(fā)中心編寫了大量開發(fā)教程并錄制了豐富視頻教學(xué)資源免費(fèi)提供給大家!

開發(fā)板更多資料領(lǐng)取可關(guān)注華清遠(yuǎn)見在線實(shí)驗(yàn)室領(lǐng)取~~~

源碼編譯、燒錄、鏡像運(yùn)行

本章節(jié)將介紹如何對(duì) I.MX8M Plus 開發(fā) Linux 系統(tǒng)編譯與燒錄。

Yocto 系統(tǒng)源碼編譯

?本小節(jié)主要講述如何編譯 imx8mp 的源碼,涉及 Yocto 源碼和 Android 源碼兩部分。

建立源碼目錄

? Yocto 源碼導(dǎo)入

首先我們?cè)?ubuntu“家”中建立 imx8mp 文件夾,用于存放 imx8mp 源碼

linux@ubuntu:$ cd ~

linux@ubuntu:$ mkdir imx8mp?

下面將【華清遠(yuǎn)見-I.MX8M Plus 開發(fā)資料\程序源碼\imx-yocto-bsp】該目錄下的 imx-yoctobsp.tar.xz.xx 文件全部導(dǎo)入虛擬機(jī)中剛創(chuàng)建好的 imx8mp 目錄下。使用如下命令解壓縮

linux@ubuntu:$ cat imx-yocto-bsp.tar.xz* | tar Jxvf -

解壓縮完成后會(huì)得到 imx-yocto-bsp 目錄,該目錄有如下文件。

該目錄下的 bsp_source 目錄中主要存放了,系統(tǒng)源碼包括 tf-a、u-boot、kernel 等,后面

的 linux 系統(tǒng)開發(fā)部分會(huì)重點(diǎn)講述。sources 文件夾下主要存放 Yocto 構(gòu)建系統(tǒng)相關(guān)的配置文件。

由于 imx-yocto-bsp 在編譯過(guò)程中會(huì)依賴很多外部源碼包,我們可以在編譯過(guò)程中通過(guò)編

譯程序自行下載,也可以使用我們提供好的完整依賴包。

因?yàn)橐蕾嚢^大,因此將此部分單獨(dú)制作成了依賴包鏡像【華清遠(yuǎn)見-I.MX8M Plus 依賴

包】將該 ISO 文件中所有的 downloads.tar.xz*文件導(dǎo)入到 imx-yocto-bsp 源碼目錄下,并解壓。

linux@ubuntu:$ cd ~/imx8mp/imx-yocto-bsp

linux@ubuntu:$ cat downloads.tar.xz* | tar Jxvf

解壓完成后會(huì)在 imx-yocto-bsp 目錄下得到 downloads 目錄。

downloads 文件不是必須的,如果您不編譯 yocto 源碼只做 linux 系統(tǒng)開發(fā)可以不用解壓

此目錄。

Weston 編譯

Yocto 的編譯環(huán)境需要在 ubuntu18.04 linux 發(fā)行版進(jìn)行編譯,并且編譯前請(qǐng)確保 ubuntu 中以安裝本文檔前面提到的《Yocto 開發(fā)環(huán)境搭建》開發(fā)工具。

1) 將當(dāng)前工作目錄切換到 imx-yocto-bsp 文件夾下

linux@ubuntu:$ cd ${HOME}/workdir/imx8mp/imx-yocto-bsp

2) 導(dǎo)入編譯配置

linux@ubuntu:$ DISTRO=fsl-imx-xwayland MACHINE=imx8mp-ai-robot source imx-setup-release.sh -b build-imx8mp-ai-robot-xwayland

3) 如果是第一次配置,需要同意一些協(xié)議

之后按空格到協(xié)議最后

輸入 y 會(huì)如下如下界面

4) 編譯源碼

編譯 multimedia 鏡像

linux@ubuntu:$ bitbake imx-image-multimedia

編譯人工智能鏡像

linux@ubuntu:$ bitbake imx-image-full

注意:在編譯 Yocto 系統(tǒng)時(shí)確保 ubuntu 主機(jī)可以連接互聯(lián)網(wǎng)由于 fsl-imx-xwayland 涉

及到的源碼較多,因此編譯會(huì)比較耗時(shí)。

編譯完成后所生成的鏡像文件保存在 tmp/deploy/images/imx8mp-ai-robot/目錄下。

? multimedia 鏡像說(shuō)明

imx-boot-imx8mp-ai-robot-sd.bin-flash_ai_robot

imx-image-multimedia-imx8mp-ai-robot.wic.bz2

? 人工智能鏡像說(shuō)明

imx-boot-imx8mp-ai-robot-sd.bin-flash_ai_robot

imx-image-full-imx8mp-ai-robot.wic.bz2

此外 Yocto 還支持一些在不同層上可用的圖像。

燒錄

在燒錄鏡像之前我們需要先按照下圖連接必要的數(shù)據(jù)線:

按照上圖分別連接 USB 數(shù)據(jù)線、電源線、以及調(diào)試串口(由下向上分別為 5V、M4_TX、

M4_RX、A53_TX、A53_RX、GND)。這里我們只連接 GND、A53_RX、A53_TX 三條線。

在上電之前我們還需要按住開發(fā)板上的紅色燒錄按鈕,讓開發(fā)板進(jìn)入燒錄模式。

imx8m plus Weston 支持 emmc 啟動(dòng)。在進(jìn)行燒錄之前要確保 uuu 工具可以正常連接開發(fā)

板。

將前面《weston 編譯》小節(jié)編譯生成的“multimedia 鏡像”或者“人工智能鏡像”導(dǎo)出到

Windows 主機(jī)中進(jìn)行燒錄,如果沒有編譯 weston 可以使用我們【華清遠(yuǎn)見-I.MX8M Plus 開發(fā)資料\系統(tǒng)鏡像\imx8mp-ai-car-weston】目錄下的 imx-image-multimedia-imx8mp-ai-robot.wic.bz2鏡像文件和 imx-boot-imx8mp-ai-robot-sd.bin-flash_ai_robot 文件進(jìn)行燒錄。

該文件中包含啟動(dòng)鏡像,rootfs 等鏡像,我們可以通過(guò)不同的命令來(lái)燒寫相關(guān)的鏡像文件。

在進(jìn)行燒錄之前需要先打開 cmd 窗口,并且將工作命令切換到該目錄下進(jìn)行燒錄。

? eMMC 燒錄

當(dāng)使用 uuu 工具燒錄鏡像時(shí),可以使用如下命令進(jìn)行 Weston 鏡像燒寫。

dos@windows:$uuu-bemmc_all .\imx-boot-imx8mp-ai-robot-sd.bin-flash_ai_robot .\imximage-multimedia-imx8mp-ai-robot.wic.bz2

燒錄成功如下圖

燒錄完成后使開發(fā)板完全斷電重啟即可。

Yocto 系統(tǒng)功能演示

weston 功能演示

硬件連接

在開發(fā)板上電之前需將調(diào)試串口、網(wǎng)線接入網(wǎng)口 1。

在上電之前我們需要先按照下圖連接必要的數(shù)據(jù)線:

按照上圖連接調(diào)試串口(由下向上分別為 5V、M4_TX、M4_RX、A53_TX、A53_RX、GND)。

這里我們只連接 GND、A53_RX、A53_TX 三條線。

設(shè)置調(diào)試串口

在燒寫過(guò)程中可以通過(guò)調(diào)試串口來(lái)監(jiān)控?zé)龑戇^(guò)程,串口調(diào)試可以借助 XSHELL 來(lái)進(jìn)行相

關(guān)調(diào)試,XSHELL 已經(jīng)在前面章節(jié)安裝完成,這里只需要配置一下相關(guān)串口即可。

雙擊桌面上的“XSHELL 6”圖標(biāo)打開。

開啟 xshell 后在自動(dòng)彈出的對(duì)話框中單擊“新建”按鈕。

在“新建會(huì)話屬性”中“協(xié)議(P)”中選擇“SERIAL”,名稱可以自定義。

下面需要對(duì)串口進(jìn)行配置。首先需要確定串口在系統(tǒng)中的 COM 口是哪個(gè)端口??梢栽?/p>

設(shè)備管理器中查找。

可以看到這里的串口為“COM3”

下面點(diǎn)擊 xshell 界面中左側(cè)的“串口”按鈕。

選擇端口號(hào)為“COM3”(需要根據(jù)當(dāng)前實(shí)際環(huán)境選擇),波特率為:115200,數(shù)據(jù)位:

8,停止位:1,奇偶校驗(yàn):無(wú),流控制:無(wú)。

配置好之后點(diǎn)擊“確定”按鈕。將看到如下界面。

先選中剛剛新建的 COM 選項(xiàng)后點(diǎn)擊“連接”

看到如上界面則說(shuō)明打開成功。

顯示屏幕選擇

開發(fā)板默認(rèn)啟動(dòng) HDMI 如果需要啟動(dòng) LCD 屏幕需按照下列方法設(shè)置。

? MIPI-DSI

對(duì)應(yīng)實(shí)際接口如下圖:

MIPI-DSI 屏幕與主板連接需要以下部件: MIPI-DSI 屏幕 1 個(gè)、信號(hào)轉(zhuǎn)換板 1 個(gè)、30 pin

FPC 軟排線 1 條、2x20 MIPI-DSI 雙絞線一條

MIPI-DSI 模組與主板 MIPI-DSI 接口連接如下:

連接完成后如果需要默認(rèn)啟動(dòng) MIPI 屏幕,我們需要調(diào)整默認(rèn)設(shè)備樹,在 u-boot 中將 fdt_

file 變量修改為 imx8mp-ai-robot-mipi070.dtb 啟動(dòng)系統(tǒng)即可。

u-boot=> setenv fdt_file imx8mp-ai-robot-mipi070.dtb

u-boot=> save

Saving Environment to MMC... Writing to MMC(1)... OK

? LVDS

對(duì)應(yīng)實(shí)際接口如下圖:

LVDS 屏幕與主板連接需要以下部件: LVDS 屏幕 1 個(gè)、信號(hào)轉(zhuǎn)換板 1 個(gè)、30 pin FPC 軟排

線 1 條、2x20 LVDS 雙絞線一條

LVDS 模組與主板 LVDS 接口連接如下:

連接完成后如果需要默認(rèn)啟動(dòng) LVDS 屏幕,我們需要調(diào)整默認(rèn)設(shè)備樹,在 u-boot 中將 fdt

_file 變量修改為 imx8mp-ai-robot-lvds070.dtb 啟動(dòng)系統(tǒng)即可。

u-boot=> setenv fdt_file imx8mp-ai-robot-lvds070.dtb

u-boot=> save

Saving Environment to MMC... Writing to MMC(1)... OK

? MIPI-DSI+LVDS+HDMI 多屏異顯

使用 MIPI-DSI+LVDS 多屏顯示時(shí),需同時(shí)連接 MIPI-DSI 和 LVDS 兩個(gè)屏幕,同時(shí)需要

在 u-boot 中將 fdt_file 變量修改為 imx8mp-ai-robot-mipi-lvds-dual.dtb 啟動(dòng)系統(tǒng)即可

u-boot=> setenv fdt_file imx8mp-ai-robot-mipi-lvds-dual.dtb

u-boot=> save

Saving Environment to MMC... Writing to MMC(1)... OK?

設(shè)備樹文件說(shuō)明

開發(fā)板支持多種設(shè)備和不同接口的屏幕,因此在使用不同設(shè)備時(shí)需要預(yù)先設(shè)置好要啟動(dòng)的設(shè)

備樹文件,下表是設(shè)備樹對(duì)應(yīng)關(guān)系

當(dāng)我們需要適配不同功能的屏幕時(shí),可按照以上描述在 uboot 中修改 fdt_file 環(huán)境變量為

相應(yīng)的設(shè)備樹名稱即可。

屏幕旋轉(zhuǎn)

可以通過(guò)在/etc/xdg/weston/weston.ini 文件中添加[output]選項(xiàng)修改屏幕默認(rèn)方向,在

weston.ini 文件中添加如下配置可實(shí)現(xiàn) 90°旋轉(zhuǎn)。

? HDMI

[output]

name=HDMI-A-1

mode=1920x1080@60

transform=rotate-90

? MIPI-DSI

[output]

name=DSI-1

mode=800x1280@60

transform=rotate-90

? LVDS

[output]

name=LVDS-1

mode=800x1280@60

transform=rotate-90

多媒體

音頻播放(此部分依賴 I.MX8MP UPS 電源擴(kuò)展板)

root@imx8mp:# pactl list sinks

root@imx8mp:# amixer -c 2 cset name='0 Speaker Driver Playback Volume Left' '200'

root@imx8mp:# amixer -c 2 cset name='0 Speaker Driver Playback Volume Right' '200'

可以看到 Sink #2 為本地聲卡,因此可以使用下面的命令進(jìn)行音頻測(cè)試

root@imx8mp:# gst-launch-1.0 filesrc location=xxx.mp3 ! mpegaudioparse ! mpg123audiodec !

audioconvert ! alsasink device=plughw:2

使用上面的命令可以使用耳機(jī)播放音頻文件,上面 xxx.map3 就是在本地的音頻文件。

? 音頻錄制

調(diào)整 mic 錄音音量

root@imx8mp:# amixer set 'CH4' 100%

查看 mic 的設(shè)備編號(hào)

root@imx8mp:# arecord -l

這里我們選擇 imx-audio-micfil 所對(duì)應(yīng)的 Card。這里即為 Card 0

錄制 WAV 音頻文件

root@imx8mp:# arecord -Dhw:0,0 -c 8 -r 16000 -f S32_LE capture5.wav

這里-Dhw:0,0 中的 0,0 即為 Card 0,Subdevice #0 所對(duì)應(yīng)的設(shè)備,音頻錄制完成后使用“Ctrl+C”可結(jié)束錄音。最終會(huì)生成 capture5.wav 音頻文件。

? 視頻播放

此部分可兼容 HDMI、MIPI-DSI、LVDS 屏幕

root@imx8mp:# gst-launch-1.0 filesrc location=720P.mp4 ! qtdemux name=d d.video_0 !

queue ! h264parse ! vpudec ! queue ! waylandsink

? 攝像頭采集(此部分依賴攝像頭模組)

攝像頭與主板連接需要以下部件: 攝像頭模組 1 個(gè)、信號(hào)轉(zhuǎn)換板 1 個(gè)、15 pin FPC 軟排線 1

條、2x10 MIPI-CSI 雙絞線一條

攝像頭模組與主板攝像頭 1 接口(也可連接至攝像頭 2 接口)連接如下:

可以使用如下指令進(jìn)行攝像頭圖像采集

root@imx8mp:# gst-launch-1.0 v4l2src device=/dev/video2 ! autovideosink

有線網(wǎng)絡(luò)配置?

Weston 系統(tǒng)默認(rèn)網(wǎng)卡為 DHCP 自動(dòng)獲取 IP 地址,如果需要固定 ip 地址可以修改

/lib/systemd/network/80-wired.network 文件指定 IP 地址。

/lib/systemd/network/80-wired.network 默認(rèn)配置如下

假設(shè)現(xiàn)在需要將 IP 地址固定為 192.168.72.2,網(wǎng)關(guān)為 192.168.72.1,DNS 為 192.168.72.1,

我們修改[Match]配置如下

[Match]

Name=eth0

KernelCommandLine=!nfsroot

[Network]配置如下

[Network]

DNS=192.168.72.1

Address=192.168.72.2/24

Gateway=192.168.72.1

將原有的[DHCP]配置刪除。

修改完成后配置文件如下所示

接入網(wǎng)線,重啟系統(tǒng)。后查看 IP 地址如下:

?無(wú)線網(wǎng)絡(luò)配置

進(jìn)入到 Linux 系統(tǒng)的終端后使用 wpa_passphrase 工具連接 WiFi。這里 WiFi 模塊有 M.2

接口和 USB 接口兩種模塊,如下圖:

? AP6212 模組

? CM358 模組

? USB 模組

M.2 接口可支持 AP6212 與 CM358 兩種模組。USB 模組可直接使用,CM358 模組與

AP6212 模組需按照相應(yīng)步驟操作。

? CM358 模組

如果使用的是 imx8mp-ai-car-weston 鏡像則需要執(zhí)行以下命令加載 M.2 驅(qū)動(dòng),出廠默認(rèn)

鏡像無(wú)需執(zhí)行(USB 模組可跳過(guò)驅(qū)動(dòng)加載)

root@imx8mp:# modprobe moal mod_para=nxp/wifi_mod_para.conf

? AP6212 模組

ap6212 模組需要調(diào)整默認(rèn)設(shè)備樹,在 u-boot 中將 fdt_file 變量修改為 imx8mp-ai-robotap6212.dtb 啟動(dòng)系統(tǒng)即可。(USB 模組與 CM358 模組可跳過(guò))

u-boot=> setenv fdt_file imx8mp-ai-robot-ap6212.dtb

u-boot=> save

Saving Environment to MMC... Writing to MMC(1)... OK

由于 CM358 模組與 AP6212 模組所使用的設(shè)備樹文件是兩種不同的配置,下表是設(shè)備樹對(duì)應(yīng)關(guān)系

當(dāng)我們需要適配不同功能的屏幕時(shí),可按照以上描述在 uboot 中修改 fdt_file 環(huán)境變量為

相應(yīng)的設(shè)備樹名稱即可。

連接 WiFi 步驟

啟動(dòng) wpa_supplicant 應(yīng)用(CM358 設(shè)備名稱為 mlan0, USB 模組與 AP6212 模組名稱為

wlan0):

root@imx8mp:# wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B

掃描周邊 WiFi 熱點(diǎn)啟動(dòng)掃描

root@imx8mp:# wpa_cli -i wlan0 scan

查看掃描結(jié)果:

root@imx8mp:# wpa_cli -i wlan0 scan_results

添加一個(gè)網(wǎng)絡(luò)連接

root@imx8mp:# wpa_cli -i wlan0 add_network

配置 WiFi 熱點(diǎn)的名稱 ssid:?

root@imx8mp:# wpa_cli -i wlan0 set_network 1 ssid '"WiFi 的 SSID"'

配置 WiFi 熱點(diǎn)的密碼 psk:

root@imx8mp:# wpa_cli -i wlan0 set_network 1 psk '"WiFi 的密碼"

連接第 1 個(gè)保存的連接

root@imx8mp:# wpa_cli -i wlan0 select_network 1

分配 IP 地址

無(wú)線網(wǎng)絡(luò)設(shè)置靜態(tài) IP 地址與有線網(wǎng)絡(luò)方法類似,只是這里對(duì)應(yīng)的配置文件為

【/lib/systemd/network/】目錄下的 51-wireless.network 文件。將本文件中的[Network]配置參照有線網(wǎng)絡(luò)的配置設(shè)置即可。IP 配置完成后使用如下命令添加 DNS 服務(wù)器即可正常進(jìn)行網(wǎng)絡(luò)連接?

root@imx8mp:# echo "nameserver 114.114.114.114" > /etc/resolv.conf

root@imx8mp:# echo "nameserver 8.8.8.8" >> /etc/resolv.conf

root@imx8mp:# ping baidu.com

注意:CM358 設(shè)備名稱為 mlan0, USB 模組與 AP6212 模組名稱為 wlan0。

開機(jī)自動(dòng)連接指定 WiFi

此部分僅限 fs-aicar-qt-system-rt-sdk-kinetic-imx8mp-ai-robot 和 imx-robot-system-rt-sdkkinetic-imx8mp-ai-robot 系統(tǒng),imx8mp-ai-car-weston 鏡像暫不支持下列操作。

要實(shí)現(xiàn)開機(jī)自動(dòng)連接 WiFi 我們需要先使用下面的命令設(shè)置好 SSID 和密碼

注意:CM358 設(shè)備名稱為 mlan0, USB 模組與 AP6212 模組名稱為 wlan0。

root@imx8mp:# wpa_passphrase "WiFi 的 SSID" "WiFi 的密碼" >> /etc/wpa_supplicant/

wpa_supplicant-wlan0.conf

設(shè)置完成后/etc/wpa_supplicant/wpa_supplicant-wlan0.conf 會(huì)出現(xiàn) network 配置選項(xiàng)。

如果需要重新設(shè)置 SSID 和密碼,則需要先手動(dòng)將紅框中的內(nèi)容刪除,然后再次執(zhí)行上面

的命令。

開啟 systemd-networkd 和 wpa_supplicant 兩個(gè)服務(wù)重啟后生效

注意:CM358 設(shè)備名稱為 mlan0, USB 模組與 AP6212 模組名稱為 wlan0。

root@imx8mp:# systemctl enable systemd-networkd.service

root@imx8mp:# systemctl enable wpa_supplicant@wlan0.service

如果需要立即生效則使用下面命令重啟服務(wù)

root@imx8mp:# systemctl restart systemd-networkd.service

root@imx8mp:# systemctl restart wpa_supplicant@wlan0.service

藍(lán)牙連接(此部分只能使用 M.2 接口)

建立串口和藍(lán)牙協(xié)議層的數(shù)據(jù)連接通道(AP6212 模組可跳過(guò))

root@imx8mp:# hciattach /dev/ttymxc2 any 115200 flow

開啟藍(lán)牙設(shè)備

root@imx8mp:# hciconfig hci0 up

查看設(shè)備地址

root@imx8mp:# hcitool dev

掃描藍(lán)牙設(shè)備

root@imx8mp:# hcitool scan

4G/5G 網(wǎng)絡(luò)連接(此部分需要外接 4G、5G 模組)

系統(tǒng)啟動(dòng)后可以查看目錄/dev/ttyUSB*?

root@imx8mp:# ~# ls /dev/ttyUSB*

/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3

發(fā)現(xiàn)設(shè)備之后執(zhí)行 quectel-CM 命令進(jìn)行撥號(hào)

root@imx8mp:# quectel-CM &

[02-07_15:52:57:850] WCDMA&LTE_QConnectManager_Linux&Android_V1.1.34

[02-07_15:52:57:851] ./quectel-CM profile[1] = (null)/(null)/(null)/0, pincode = (null)

[02-07_15:52:57:853] Find /sys/bus/usb/devices/2-1.6 idVendor=2c7c idProduct=0125

[02-07_15:52:57:854] Find /sys/bus/usb/devices/2-1.6:1.4/net/eth1

[02-07_15:52:57:854] Find usbnet_adapter = eth1

[02-07_15:52:57:854] Find /sys/bus/usb/devices/2-1.6:1.4/GobiQMI/qcqmi1

[02-07_15:52:57:854] Find qmichannel = /dev/qcqmi1

[02-07_15:52:57:916] Get clientWDS = 7

[02-07_15:52:57:948] Get clientDMS = 8

[02-07_15:52:57:980] Get clientNAS = 9

[02-07_15:52:58:012] Get clientUIM = 10

[02-07_15:52:58:045] Get clientWDA = 11

[02-07_15:52:58:079] requestBaseBandVersion EC20CEFILGR06A01M1G

[02-07_15:52:58:172] requestGetSIMStatus SIMStatus: SIM_READY

[02-07_15:52:58:204] requestGetProfile[1] 3gnet///0

[02-07_15:52:58:236] requestRegistrationState2 MCC: 460, MNC: 1, PS: Attached, DataCap:

LTE

[02-07_15:52:58:268] requestQueryDataCall IPv4ConnectionStatus: DISCONNECTED

[02-07_15:52:58:333] requestRegistrationState2 MCC: 460, MNC: 1, PS: Attached, DataCap:

LTE

[02-07_15:52:58:365] requestSetupDataCall WdsConnectionIPv4Handle: 0xe18031b0

[02-07_15:52:58:461] requestQueryDataCall IPv4ConnectionStatus: CONNECTED

[02-07_15:52:58:493] ifconfig eth1 up

[ 190.441795] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready

[02-07_15:52:58:506] busybox udhcpc -f -n -q -t 5 -i eth1

udhcpc: started, v1.31.1

udhcpc: sending discover

udhcpc: sending select for 10.224.108.150

udhcpc: lease of 10.224.108.150 obtained, lease time 7200

[02-07_15:52:59:060] /etc/udhcpc.d/50default: Adding DNS 123.123.123.123

[02-07_15:52:59:060] /etc/udhcpc.d/50default: Adding DNS 123.123.123.124

?

由以上 log 消息可以看到 4G 模塊默認(rèn)分配到的 IP 為 10.224.108.150

我們可以使用 ifconfig 命令進(jìn)行查看

如果在 ifconfig 可以看到有 IP 地址為 10.224.108.150 則說(shuō)明 4G 模塊已聯(lián)網(wǎng)成功。

? EC200s(4G cat1)

首先啟動(dòng)開發(fā)板至終端,之后接入 EC200s 模塊,稍等片刻終端出現(xiàn)如下提示

這個(gè)信息說(shuō)明模塊已經(jīng)被正確識(shí)別,我們需要連接模塊的 USB1 節(jié)點(diǎn),進(jìn)行 AT 指令控

制使用 microcom 連接/dev/ttyUSB1 節(jié)點(diǎn)

root@imx8mp:# microcom /dev/ttyUSB1

接下來(lái)我們需要進(jìn)行撥號(hào),首先需要確定模塊的工作模式是不是 RNDIS 模式

root@imx8mp:# AT+QCFG="usbnet"

如果模組返回“+QCFG: "usbnet",3”則說(shuō)明模塊在 RNDIS 模式

如果返回的不是上圖所示則需要執(zhí)行如下指令切換模式

root@imx8mp:# AT+QCFG="usbnet",3

工作模式切換完成后需要設(shè)置接入點(diǎn)

root@imx8mp:# at+qicsgp=1,1,"uninet"

如果當(dāng)前是 2g、3g 網(wǎng)絡(luò)則需要設(shè)置 AT+QIACT=1

root@imx8mp:# AT+QIACT=1

最后使用 AT+QNETDEVCTL=1,1,1 進(jìn)行撥號(hào)

root@imx8mp:# AT+QNETDEVCTL=1,1,1

設(shè)置完成后按 ctrl+x 退出 microcom?;氐浇K端獲取 ip 地址

root@imx8mp:# udhcpc -fnq -i usb1

出現(xiàn)該提示說(shuō)明撥號(hào)成功。使用 ifconfig 查看網(wǎng)絡(luò)狀態(tài)會(huì)發(fā)現(xiàn) usb1 已經(jīng)被正確分配到了 IP 地址

系統(tǒng)編譯

Yocto 的編譯環(huán)境需要在 ubuntu18.04 linux 發(fā)行版進(jìn)行編譯,并且編譯前請(qǐng)確保 ubuntu 中以安裝本文檔前面提到的《Android 系統(tǒng)編譯環(huán)境》開發(fā)工具。

Android 源碼導(dǎo)入

接下來(lái)導(dǎo)入 Android 部分源碼,如果您不需要重新編譯 Android 系統(tǒng),此部分可以跳過(guò)。

首先我們?cè)?ubuntu“家”中建立 imx8mp 文件夾,用于存放 imx8mp 源碼。如果在此前已

經(jīng)創(chuàng)建了 imx8mp 文件夾則不必再次執(zhí)行。

linux@ubuntu:$ cd ~

linux@ubuntu:$ mkdir imx8mp

將【華清遠(yuǎn)見-I.MX8M Plus-Android11 源碼包】該目錄下的 android11.tar.xz.xx 文件全部

導(dǎo)入虛擬機(jī)中剛創(chuàng)建好的 imx8mp 目錄下。使用如下命令解壓縮

linux@ubuntu:$ cat android11.tar.xz* | tar Jxvf –

解壓縮完成后會(huì)得到 android11 目錄,該目錄有如下文件。

該目錄下的 vendor/nxp-opensource 目錄中主要存放了系統(tǒng)源碼包括 tf-a、u-boot、kernel

等源碼。

安裝 u-boot 編譯時(shí)環(huán)境

imx8m plus 在編譯 u-boot 前需要先安裝 gcc-arm-8.3-2019.03 交叉編譯工具鏈,該交叉編

譯器位于【華清遠(yuǎn)見-I.MX8M Plus 開發(fā)資料\工具軟件】目錄下的 gcc-arm-8.3-2019.03-x86_6

4-aarch64-linux-gnu.tar.xz。

將 gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz 導(dǎo)入到 ubuntu 系統(tǒng)中,通過(guò)如下

命令將其解壓到/opt 目錄下。

linux@ubuntu:$ sudo tar -xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz -C /opt

解壓完成后在/opt 目錄下得到 gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu 文件夾

設(shè)置環(huán)境變量

現(xiàn)在我們以及將交叉編譯工具鏈安裝完成了,接下來(lái)需要將上面交叉編譯工具鏈所在位

置在.bashrc 文件夾中設(shè)置一個(gè)環(huán)境變量。

linux@ubuntu:$ vi ~/.bashrc?

在文檔末尾添加如下環(huán)境變量

export AARCH64_GCC_CROSS_COMPILE=/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-lin

ux-gnu/bin/aarch64-linux-gnu-

Android11 源碼

首先將當(dāng)前工作目錄切換到 android 源碼所在目錄

linux@ubuntu:$ cd ${HOME}/imx8mp/android11

該目錄內(nèi)容如下

?

? 選擇默認(rèn) LCD 屏幕

Android11 系統(tǒng)我們支持 MIPI LCD、LVDS LCD 以及 HDMI,我們可以在編譯前選擇默

認(rèn)支持的顯示設(shè)備。

首先打開 device/nxp/imx8m/evk_8mp/BoardConfig.mk 文件,修改 TARGET_BOARD_DT

S_CONFIG 變量即可更換默認(rèn)顯示設(shè)備。例如將默認(rèn)設(shè)備改為 lvds lcd 則將該變量改為

如下:TARGET_BOARD_DTS_CONFIG := imx8mp:imx8mp-ai-robot-lvds070.dtb

linux@ubuntu:$ vi device/nxp/imx8m/evk_8mp/BoardConfig.mk

導(dǎo)入編譯環(huán)境變量

linux@ubuntu:$ source build/envsetup.sh

執(zhí)行 lunch 命令,我們選中的是 i.MX 8M Plus 開發(fā)板

linux@ubuntu:$ lunch evk_8mp-userdebug

執(zhí)行編譯腳本

linux@ubuntu:$ ./imx-make.sh -jx

這里可以使用通過(guò)-jx 參數(shù)選擇多線程編譯,但是由于 Android11 編譯過(guò)程對(duì)內(nèi)存空間要

求較大,所以不建議使用多線程編譯

使用如下命令組合也能實(shí)現(xiàn)相同功能

linux@ubuntu:$ source build/envsetup.sh

linux@ubuntu:$ lunch evk_8mp-userdebug

linux@ubuntu:$./imx-make.sh bootloader kernel -jx

linux@ubuntu:$ make -jx

編譯完成后會(huì)在“out/target/product/evk_8mp”目錄下生成相關(guān)鏡像文件

root/:根文件系統(tǒng)所在目錄

system/:android 系統(tǒng)鏡像目錄,用于生成 system.img

ramdisk.img:由 root 目錄生成的鏡像文件

vendor.img:vendor 鏡像,用于掛載 Android 下的/vendor 目錄

boot.img:一個(gè)復(fù)合鏡像,包括 linux 內(nèi)核,ramdisk 和一些啟動(dòng)參數(shù)

單獨(dú)編譯 u-boot

導(dǎo)入編譯環(huán)境變量,此操作只需要執(zhí)行一次,如果已經(jīng)執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ source build/envsetup.sh

執(zhí)行 lunch 命令,我們選中的是 i.MX 8M Plus 開發(fā)板,此操作只需要執(zhí)行一次,如果已經(jīng)

執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ lunch evk_8mp-userdebug

編譯 u-boot

linux@ubuntu:$ ./imx-make.sh bootloader -j4

編譯完成后會(huì)在 out/target/product/evk_8mp/目錄下生成 u-boot 文件

單獨(dú)編譯 kernel

導(dǎo)入編譯環(huán)境變量,此操作只需要執(zhí)行一次,如果已經(jīng)執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ source build/envsetup.sh? ? ? ? ? ??

執(zhí)行 lunch 命令,我們選中的是 i.MX 8M Plus 開發(fā)板,此操作只需要執(zhí)行一次,如果已經(jīng)

執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ lunch evk_8mp-userdebug

編譯 Linux 內(nèi)核

linux@ubuntu:$ ./imx-make.sh kernel -c -j4

?編譯 boot.img

導(dǎo)入編譯環(huán)境變量,此操作只需要執(zhí)行一次,如果已經(jīng)執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ source build/envsetup.sh

執(zhí)行 lunch 命令,我們選中的是 i.MX 8M Plus 開發(fā)板,此操作只需要執(zhí)行一次,如果已經(jīng)

執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ lunch evk_8mp-userdebug

編譯 boot.img

linux@ubuntu:$ ./imx-make.sh bootimage -j4

或者使用如下命令也可以實(shí)現(xiàn)相同功能

linux@ubuntu:$ ./imx-make.sh kernel -j4

linux@ubuntu:$ make bootimage -j4

編譯完成后會(huì)在 out/target/product/evk_8mp/目錄下生成 boot.img 文件

編譯 dtbo

導(dǎo)入編譯環(huán)境變量,此操作只需要執(zhí)行一次,如果已經(jīng)執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ source build/envsetup.sh? ? ? ? ? ??

執(zhí)行 lunch 命令,我們選中的是 i.MX 8M Plus 開發(fā)板,此操作只需要執(zhí)行一次,如果已經(jīng)

執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ lunch evk_8mp-userdebug

編譯 dtbo 設(shè)備樹

linux@ubuntu:$ ./imx-make.sh dtboimage -j4

或者使用如下命令也可以實(shí)現(xiàn)相同功能

linux@ubuntu:$ ./imx-make.sh kernel -j4

linux@ubuntu:$ make dtboimage -j4

編譯完成后會(huì)在 out/target/product/evk_8mp/目錄下生成 dtbo 文件

生成 fastboot_imx_flashall 燒寫腳本

注意:該部分功能目前版本暫時(shí)沒有實(shí)現(xiàn),在后續(xù)發(fā)布版本中會(huì)實(shí)現(xiàn)

導(dǎo)入編譯環(huán)境變量,此操作只需要執(zhí)行一次,如果已經(jīng)執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ source build/envsetup.sh

執(zhí)行 lunch 命令,我們選中的是 i.MX 8M Plus 開發(fā)板,此操作只需要執(zhí)行一次,如果已經(jīng)

執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ lunch evk_8mp-userdebug

編譯 fastboot_imx_flashall

linux@ubuntu:$ make -j4 fastboot

編 譯 完 成 后 會(huì) 在 “ out/host/linux-x86/bin ” 目 錄 下 生 成 linux 環(huán) 境 下 運(yùn) 行 腳 本 ,“out/host/windows-x86/bin”目錄下生成 Windows 環(huán)境下運(yùn)行腳本。

編譯差分資源包

Android 平臺(tái)提供 Google diff arithmetic 差分機(jī)制,升級(jí)包支持整包和差分包。整包即包

含整個(gè) system 分區(qū)中的數(shù)據(jù)文件,而差分包則僅包含兩個(gè)版本之間改動(dòng)的部分。

利用整包升級(jí)好比對(duì)電腦進(jìn)行重作系統(tǒng),格式分系統(tǒng)分區(qū),并將新系統(tǒng)數(shù)據(jù)寫入分區(qū);

而利用差分包升級(jí)不會(huì)格式化 system 分區(qū),只是對(duì)其中部分存儲(chǔ)段的內(nèi)容進(jìn)行重寫。除

升級(jí)包之外,制作過(guò)程中還會(huì)涉及到另一種 zip 包,代碼中稱之為 target-files zipfile,我

稱之為差分資源包。

?編譯環(huán)境變量,此操作只需要執(zhí)行一次,如果已經(jīng)執(zhí)行過(guò)此操作則不需要再次執(zhí)行? ? ? ? ? ?

linux@ubuntu:$ source build/envsetup.sh

執(zhí)行 lunch 命令,我們選中的是 i.MX 8M Plus 開發(fā)板,此操作只需要執(zhí)行一次,如果已經(jīng)

執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ lunch evk_8mp-userdebug

編譯差分資源包

linux@ubuntu:$ ./imx-make.sh bootloader kernel -j4

linux@ubuntu:$ make target-files-package -j4? ? ?

編譯完成后會(huì)在“out/target/product/evk_8mp/obj/PACKAGING/target_files_intermediates/e

vk_8mp-ota-**.zip”目錄下生成差分資源包。

編譯差分包

生成差分包前需要準(zhǔn)備兩個(gè)差分資源包。一個(gè)是上一版本的差分資源包我們稱為 PREVI

OUS-target_files.zip,還有一個(gè)新生成的差分資源包我們稱為 NEWtarget_files.zip。

關(guān)于差分資源包的生成可以參考上一節(jié)內(nèi)容

編譯差分資源包

linux@ubuntu:$ out/host/linux-x86/bin/ota_from_target_files -i PREVIOUS-target_files.zip NEWtarget_files.zip incremental-ota.zip

編譯完成后會(huì)在當(dāng)前目錄下生成差分包 incremental-ota.zip。

編譯整包

導(dǎo)入編譯環(huán)境變量,此操作只需要執(zhí)行一次,如果已經(jīng)執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ source build/envsetup.sh

執(zhí)行 lunch 命令,我們選中的是 i.MX 8M Plus 開發(fā)板,此操作只需要執(zhí)行一次,如果已經(jīng)

執(zhí)行過(guò)此操作則不需要再次執(zhí)行

linux@ubuntu:$ lunch evk_8mp-userdebug

編譯差分資源包

linux@ubuntu:$ ./imx-make.sh bootloader kernel -j4

linux@ubuntu:$ make otapackage -j4

編譯完成后會(huì)在“out/target/product/evk_8mp/evk_8mp-ota-**.zip”目錄下生成整包。

android11 系統(tǒng)燒錄

Android 系統(tǒng)的 eMMC 卡分區(qū)如下圖所示:

userdata 分區(qū)用于存放應(yīng)用程序、系統(tǒng)配置數(shù)據(jù)庫(kù)等解壓縮代碼/數(shù)據(jù)。在正常引導(dǎo)模式

下,根文件系統(tǒng)首先從引導(dǎo)分區(qū)用 ramdisk 掛載,然后將邏輯系統(tǒng)分區(qū)掛載并切換為根。在recovery 模式下,根文件系統(tǒng)從引導(dǎo)分區(qū)用 ramdisk 掛載。

android 鏡像

在燒錄鏡像之前我們需要先按照下圖連接必要的數(shù)據(jù)線

按照上圖分別連接 USB 數(shù)據(jù)線、電源線、以及調(diào)試串口(由下向上分別為 5V、M4_TX、

M4_RX、A53_TX、A53_RX、GND)。這里我們只連接 GND、A53_RX、A53_TX 三條線。

在上電之前我們還需要按住開發(fā)板上的紅色燒錄按鈕,讓開發(fā)板進(jìn)入燒錄模式

imx8m plusAndroid 支持 emmc 啟動(dòng)。在進(jìn)行燒錄之前要確保 uuu 工具可以正常連接開發(fā)板。

將前面《Android11 編譯》小節(jié)編譯生成的“Android 鏡像”導(dǎo)出到 Windows 主機(jī)中進(jìn)行

燒錄,如果沒有編譯 Android 可以使用我們【華清遠(yuǎn)見-I.MX8M Plus 開發(fā)資料\系統(tǒng)鏡像

\imx8mp-android11】目錄下提供好的系統(tǒng)鏡像。

首先進(jìn)入到對(duì)應(yīng)屏幕的目錄下,可以看到有如下文件

該文件夾中包含啟動(dòng)鏡像,rootfs 等鏡像,我們可以通過(guò)不同的命令來(lái)燒寫相關(guān)的鏡像文

件。在進(jìn)行燒錄之前需要先打開 cmd 窗口,并且將工作命令切換到該目錄下進(jìn)行燒錄。

使用如下命令可以將 Android 鏡像燒錄至 eMMC

dos@windows:$ .\uuu_imx_android_flash.bat -f imx8mp -a -e

該腳本默認(rèn)燒寫的顯示設(shè)備為 HDMI,我們可以用以下指令修改默認(rèn)顯示設(shè)備

MIPI070 屏幕燒寫指令

dos@windows:$ .\uuu_imx_android_flash.bat -f imx8mp -d mipi070 -a -e

? LVDS070 屏幕燒寫指令

dos@windows:$ .\uuu_imx_android_flash.bat -f imx8mp -d lvds070 -a -e

燒錄成功顯示結(jié)果如下

DM-verity

DM-verity 是 Android 系統(tǒng)安全的重要部分,它能保證 Android 的 vendor 和 system 鏡

像文件中的內(nèi)容是真實(shí)可靠的。所以如果打開了 DM-verity 功能那么如果我們通過(guò) fastboot 修改 android 系統(tǒng)的 system 分區(qū)或者 vendor 分區(qū),那么 DM-verity 校驗(yàn)時(shí)就會(huì)出錯(cuò),因此在fastboot 之前需要先將 DM-verity 解鎖。

DM-verity 解鎖有兩種辦法,第一是通過(guò) android 的開發(fā)者選項(xiàng)進(jìn)行解鎖,第二種是通過(guò)

adb 指令進(jìn)行解鎖。

?通過(guò) android 開發(fā)者選項(xiàng)解鎖 DM-verity

首先啟動(dòng) android 系統(tǒng)依次點(diǎn)擊“設(shè)置”->“開發(fā)者選項(xiàng)”->“解鎖 OEM”

在開發(fā)板串口終端執(zhí)行如下命令,進(jìn)入 bootloader

root@imx8mp:# reboot bootloader

在開發(fā)板的 bootloader 中輸入如下指令解鎖 oem

u-boot=> fastboot oem unlock

等待解鎖完成后即可使用 fastboot 進(jìn)行燒錄 了

? 通過(guò) adb 指令解鎖 DM-verity

首先啟動(dòng) android 系統(tǒng),然后在 Windows 的 cmd 窗口下執(zhí)行如下指令

dos@windows:$ adb root

dos@windows:$ adb disable-verity

dos@windows:$ adb reboot

燒錄指定分區(qū)

有些時(shí)候在調(diào)試階段可能只是改動(dòng)了一部分程序,并不想每次都重新燒錄鏡像,這種情

況下可以通過(guò) fastboot 工具只燒錄與程序改動(dòng)相關(guān)的分區(qū),而不必每次都重新燒錄。

啟用了動(dòng)態(tài)分區(qū)功能后 fastboot 分為兩種模式,一種位 u-boot fastboot。另一種是 userspace fastboot。在不同的模式中,可以操作的分區(qū)也是不一樣的,下表兩種模式對(duì)應(yīng)的分區(qū)。

1) U-Boot fastboot 模式

首先啟動(dòng)開發(fā)板,進(jìn)去 uboot 終端

在開發(fā)板的串口終端輸入如下指令

u-boot=> fastboot 0

執(zhí)行完此命令后,打開主機(jī)的“CMD”窗口,執(zhí)行如下命令,可以看到有一個(gè) fastboot 設(shè)

dos@windows:$ fastboot devices

接下來(lái)可以通過(guò)fastboot命令進(jìn)行分區(qū)燒錄,由上面的分區(qū)對(duì)應(yīng)表可知在該模式下可以對(duì)boot,

vendor_boot, dtbo, vbmeta, misc, super 和 bootloader0, gpt, mcu_os 分區(qū)進(jìn)行操作。

? boot 分區(qū)

dos@windows:$ fastboot flash boot_a boot.img

? vendor_boot 分區(qū)

dos@windows:$ fastboot flash vendor_boot_a vendor_boot.img?

? dtbo 分區(qū)

dos@windows:$ fastboot flash dtbo_a dtbo-imx8mp.img

? vbmeta 分區(qū)

dos@windows:$ fastboot flash vbmeta_a vbmeta-imx8mp.img

? mcu_os 分區(qū)

dos@windows:$ fastboot flash mcu_os imx8mp_mcu_demo.img

2) userspace fastboot 模式

userspace fastboot 模式可以通過(guò) android 系統(tǒng)的 adb 命令進(jìn)入,也可以通過(guò) uboot 進(jìn)入。

通過(guò) adb 命令進(jìn)入,需要先進(jìn)入 android 系統(tǒng),然后再主機(jī)的“CMD”終端下輸入如下指

令。需要注意的是在啟動(dòng)過(guò)程中不要進(jìn)入 uboot 終端。?

dos@windows:$ adb reboot fastboot

之后系統(tǒng)會(huì)重啟,然后進(jìn)入 userspace fastboot 模式,可以在終端中使用如下命令發(fā)現(xiàn) fast

boot 設(shè)備即為成功。

dos@windows:$ fastboot devices

通過(guò) uboot 進(jìn)入時(shí)需要先進(jìn)入 uboot 終端。

在開發(fā)板的串口終端輸入如下指令

u-boot=> fastboot 0

執(zhí)行完此命令后,打開主機(jī)的“CMD”窗口,執(zhí)行如下命令進(jìn)入 userspace fastboot 模式

dos@windows:$ fastboot reboot fastboot

之后系統(tǒng)會(huì)重啟,此時(shí)“CMD”終端會(huì)短暫出現(xiàn)“< waiting for any device >”這個(gè)是由于

userspace fastboot 正在啟動(dòng)稍等即可,最后執(zhí)行成功結(jié)果如下。

可以在終端中使用如下命令發(fā)現(xiàn) fastboot 設(shè)備即為成功。

dos@windows:$ fastboot devices

接下來(lái)可以通過(guò) fastboot 命令進(jìn)行分區(qū)燒錄,由上面的分區(qū)對(duì)應(yīng)表可知在該模式下可以對(duì) system, system_ext,vendor, product 分區(qū)進(jìn)行操作。

? system 分區(qū)

dos@windows:$ fastboot flash system_a system.img

? system_ext 分區(qū)

dos@windows:$ fastboot flash system_ext_a system_ext.img

? vendor 分區(qū)

dos@windows:$ fastboot flash vendor_a vendor.img

? product 分區(qū)

dos@windows:$ fastboot flash product_a product.img

基于imx8m plus開發(fā)板全體系開發(fā)教程2:源碼編譯、燒錄、鏡像運(yùn)行的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
新宾| 新巴尔虎左旗| 珲春市| 凤冈县| 丰原市| 临潭县| 丁青县| 西林县| 高雄市| 仁布县| 从化市| 庐江县| 汉沽区| 桦南县| 靖州| 西昌市| 崇州市| 长泰县| 内丘县| 桦甸市| 七台河市| 淳化县| 江西省| 买车| 洛浦县| 鄄城县| 阿勒泰市| 东明县| 浏阳市| 平泉县| 长白| 收藏| 华宁县| 通化县| 建平县| 屏边| 宁化县| 确山县| 昭通市| 巍山| 壶关县|