當(dāng)前位置:首頁 > 物聯(lián)網(wǎng) > 嵌入式 liunx 安卓 教程連載
[導(dǎo)讀]M68 和M66 Rockchip Linux SDK 支持 Buildroot,Yocto和Debian三個(gè)系統(tǒng),內(nèi)核基于 Kernel 4.4引導(dǎo)基于 U-boot v2017.09,目前支持 VPU 硬解碼、GPU 3D、Wayland 顯示等功能。具體功能調(diào)試和接口說明,

Linux開發(fā)

Rockchip Linux SDK 軟件包

1.1 簡介

M68 和M66 Rockchip Linux SDK 支持 Buildroot,Yocto和Debian三個(gè)系統(tǒng),內(nèi)核基于 Kernel 4.4引導(dǎo)基于 U-boot v2017.09,目前支持 VPU 硬解碼、GPU 3D、Wayland 顯示等功能。具體功能調(diào)試和接口說明,請(qǐng)閱讀SDK工程目錄docs/下文檔。

1.2 SDK獲取方法 (聯(lián)系BesTom  WWW.bestom.net,bestom@bestom.net)

1.2.1SDK更新

.repo/repo/repo sync -c --no-tags 命令同步更新,下載代碼后請(qǐng)使用該命令檢查是否更新。

1.3 SDK適配硬件全自動(dòng)編譯匯總

進(jìn)入工程根目錄執(zhí)行以下命令自動(dòng)完成所有的編譯:

./build.sh all # 只編譯模塊代碼(u-Boot,kernel,Rootfs,Recovery)

# 需要再執(zhí)行./mkfirmware.sh 進(jìn)行固件打包

./build.sh# 在./build.sh all基礎(chǔ)上

# 1. 增加固件打包 ./mkfirmware.sh

# 2. update.img打包

# 3. 復(fù)制rockdev目錄下的固件到IMAGE/***_RELEASE_TEST/IMAGES目錄

# 4. 保存各個(gè)模塊的補(bǔ)丁到IMAGE/***_RELEASE_TEST/PATCHES目錄

# 注:./build.sh 和 ./build.sh allsave 命令?樣

默認(rèn)是 Buildroot,可以通過設(shè)置壞境變量 RK_ROOTFS_SYSTEM 指定 rootfs。RK_ROOTFS_SYSTEM? 前可設(shè)定三個(gè)類型:buildroot、debian、 yocto 。 如需要 debain 可以通過以下命令進(jìn)行生成:

$export RK_ROOTFS_SYSTEM=debian

$./build.sh

2. SDK 開發(fā)環(huán)境搭建

2.1 概述

本節(jié)主要介紹了如何在本地搭建編譯環(huán)境來編譯Rockchip Buildroot Linux SDK源代碼。當(dāng)前SDK只支持在Linux環(huán)境下編譯,并提供Linux下的交叉編譯工具鏈。

一個(gè)典型的嵌入式開發(fā)環(huán)境通常包括Linux 服務(wù)器、Windows PC和目標(biāo)硬件版,典型開發(fā)環(huán)境如下圖所示。

Linux 服務(wù)器上建立交叉編譯環(huán)境,為軟件開發(fā)提供代碼更新下載,代碼交叉編譯服務(wù)。

Windows PC 和 Linux 服務(wù)器共享程序,并安裝Putty或MobaXterm,通過網(wǎng)絡(luò)遠(yuǎn)程登陸到 Linux 服務(wù)器,進(jìn)行交叉編譯,及代碼的開發(fā)調(diào)試。

Windows PC通過串口和 USB 與目標(biāo)硬件板連接,可將編譯后的鏡像文件燒寫到目標(biāo)硬件板,并調(diào)

試系統(tǒng)或應(yīng)用程序。

注:開發(fā)環(huán)境中使用了Windows PC,實(shí)際上很多工作也可以在Linux PC上完成,如使用minicom代替

Putty等,用戶可自行選擇。

2.2 Linux服務(wù)器開發(fā)環(huán)境搭建

Rockchip Linux SDK是在 Ubuntu 18.04 以上系統(tǒng)開發(fā)測(cè)試的。因此,我們推薦使用Ubuntu 18.04以上系統(tǒng)進(jìn)行編譯。其他版本沒有具體測(cè)試,可能需要對(duì)軟件包做相應(yīng)調(diào)整。

除了系統(tǒng)要求外,還有其他軟硬方面的要求。

硬件要求:64位系統(tǒng),硬盤空間大于40G。如果您進(jìn)行多個(gè)構(gòu)建,將需要更大的硬盤空間。

軟件包依賴:除了python 2.7,make 3.8,git 1.7之外,還需要安裝一些額外的軟件包,將在軟件包安裝章節(jié)中列出。

2.2.1 發(fā)布包使用Linux服務(wù)器系統(tǒng)版本

本SDK開發(fā)環(huán)境安裝如下版本Linux 系統(tǒng),SDK默認(rèn)均以此Linux 系統(tǒng)進(jìn)行編譯:

Ubuntu 18.04.4 LTS

Linux version 4.15.0-109-generic (buildd@lgw01-amd64-010) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #110-Ubuntu SMP Tue Jun 23 02:39:32 UTC 2020

2.2.2 網(wǎng)絡(luò)環(huán)境搭建

請(qǐng)用戶自行配置網(wǎng)絡(luò),并安裝nfs,samba,ssh 等網(wǎng)絡(luò)組件。

2.2.3 安裝依賴包

本 SDK 開發(fā)環(huán)境是在 Ubuntu 系統(tǒng)上開發(fā)測(cè)試。我們推薦使用 Ubuntu 18.04 的系統(tǒng)進(jìn)行編譯。其他的Linux 版本可能需要對(duì)軟件包做相應(yīng)調(diào)整。除了系統(tǒng)要求外,還有其他軟硬件方面的要求。

硬件要求:64 位系統(tǒng),硬盤空間大于 40G。如果您進(jìn)行多個(gè)構(gòu)建,將需要更大的硬盤空間。

軟件要求:Ubuntu 18.04 系統(tǒng):

編譯 SDK 環(huán)境搭建所依賴的軟件包安裝命令如下:

sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \

expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \

qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip \

device-tree-compiler python-pip ncurses-dev pyelftools \

建議使用 Ubuntu18.04 系統(tǒng)或更高版本開發(fā),若編譯遇到報(bào)錯(cuò),可以視報(bào)錯(cuò)信息,安裝對(duì)應(yīng)的軟件包。

2.2.4 交叉編譯工具鏈介紹

鑒于Rockchip Buildroot SDK目前只在Linux下編譯,我們也僅提供了Linux下的交叉編譯?具鏈。其中U-Boot及Kernel使用的編譯工具鏈預(yù)置目錄在prebuilt/gcc下,buildroot使用該開源軟件中編譯出來的工具鏈。

U-Boot 及Kernel編譯工具鏈:

prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

對(duì)應(yīng)版本

gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05)

Buildroot編譯工具鏈:

64位系統(tǒng):

buildroot/output/rockchip芯片型號(hào)/host/bin/aarch64-buildroot-linux-gnu-

32位系統(tǒng):

buildroot/output/rockchip芯片型號(hào)/host/usr/arm-linux-gcc

對(duì)應(yīng)版本:

gcc version 9.3.0 (Buildroot 2018.02-rc3-02723-gd3fbc6ae13)

如果需要其他平臺(tái)或版本的?具鏈,需自行編譯。

上述環(huán)境準(zhǔn)備好后,Linux服務(wù)器開發(fā)環(huán)境搭建已完成,可以下載編譯源代碼了。

2.3 Window PC 開發(fā)壞境搭建

2.3.1 開發(fā)工具安裝

請(qǐng)用戶自行安裝 Vim,Notepad++, vsCode等編輯軟件。

2.3.2 Rockchip USB 驅(qū)動(dòng)安裝

開發(fā)調(diào)試階段,需要將設(shè)備切換至 Loader 模式或是 Maskrom 模式,需要安裝 Rockusb 驅(qū)動(dòng)才能正常識(shí)別設(shè)備。

Rockchip USB 驅(qū)動(dòng)安裝助手存放在 tools/windows/DriverAssitant_v5.x.zip。支持

Xp,win7_32,win7_64,win10_32,win10_64 等操作系統(tǒng)。 安裝步驟如下:

2.3.3 Windows 燒錄工具使用

Windows 系統(tǒng)上的的燒錄工具發(fā)布在 tools/windows/RKDevTool/RKDevTool_Release,可用于 Windows 環(huán)境下開發(fā)調(diào)試,固件的燒寫。

2.3.4 目標(biāo)硬件板準(zhǔn)備

請(qǐng)參考SDK 軟件包適用硬件列表SDK軟件包適用硬件列表,選擇對(duì)應(yīng)硬件板子,進(jìn)行后續(xù)的開發(fā)調(diào)試。

對(duì)應(yīng)的硬件使用說明文檔,會(huì)介紹硬件接口,使用說明,及燒錄操作方法。

3. SDK 安裝準(zhǔn)備?作

3.1 簡要介紹

Rockchip Linux SDK 的代碼和相關(guān)文檔被劃分為了若干 git 倉庫分別進(jìn)行版本管理,開發(fā)者可以使用 repo 對(duì)這些 git 倉庫進(jìn)行統(tǒng)一的下載,提交,切換分支等操作。

3.2 安裝 repo

確保主目錄下有?個(gè) bin/ 目錄,并且該目錄包含在路徑中:

mkdir ~/bin

export PATH=~/bin:$PATH

如果可以訪問 google 的地址,下載 Repo 工具,并確保它可執(zhí)行:

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo

中國國內(nèi)環(huán)境如果執(zhí)行上述命令后發(fā)現(xiàn)~/bin/repo 為空,此時(shí)可以訪問國內(nèi)的站點(diǎn)來下載repo 工具

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo

chmod a+x ~/bin/repo

除以上兩種方式外,也可以使用如下命令獲取 repo

sudo apt-get install repo

3.3 Git 配置

在使用repo 之前請(qǐng)配置一下自己的 git 信息,否則后面的操作可能會(huì)遇到 hook 檢查的障礙:

git config --global user.name "your name"

git config --global user.email "your mail"

3.4 軟件更新記錄

為方便客戶及開發(fā)者了解到 SDK 更新所覆蓋的修改,解決的問題。SDK 上加入了 ReleaseNote.txt,該文件會(huì)記錄每次更新解決的問題,及是否建議客戶全部更新。請(qǐng)客戶及開發(fā)者更新ReleaseNote 后,查看更新內(nèi)容,并決定是否更新 SDK 代碼。

軟件發(fā)布版本升級(jí)通過工程 xml 進(jìn)行查看當(dāng)前版本,具體方法如下:

.repo/manifests$ ls -l -h 芯片名稱_linux_release.xml

軟件發(fā)布版本升級(jí)更新內(nèi)容通過工程文本可以查看,具體方法如下:

.repo/manifests$ cat */芯片型號(hào)_Linux_SDK_Note.md

或者參考工程目錄:

<SDK>/docs/芯?型號(hào)/芯?型號(hào)_Linux_SDK_Note.md

4. SDK 編譯

本 SDK 開發(fā)環(huán)境是在 Ubuntu 系統(tǒng)上開發(fā)測(cè)試。我們推薦使用 Ubuntu 18.04 的系統(tǒng)進(jìn)行編譯。其他的 Linux 版本可能需要對(duì)軟件包做相應(yīng)調(diào)整。除了系統(tǒng)要求外,還有其他軟硬件方面的要求。

硬件要求:64 位系統(tǒng),硬盤空間大于 40G。如果您進(jìn)行多個(gè)構(gòu)建,將需要更大的硬盤空間。

軟件要求:Ubuntu 18.04 系統(tǒng)。

編譯 SDK 環(huán)境搭建所依賴的軟件包安裝,參考 軟件包安裝。

4.1 U-Boot 編譯

進(jìn)入SDK工程。運(yùn)行如下命令進(jìn)行編譯

<SDK>#./build.sh uboot

或者

<SDK>/U-boot# ./make.sh rk3568

4.2 Kernel 編譯

進(jìn)入工程目錄根目錄執(zhí)行以下命令自動(dòng)完成 kernel 的編譯及打包。

<SDK>#./build.sh kernel

或者

<SDK>/kernel#make ARCH=arm64 rockchip_linux_defconfig & make ARCH=arm64 rk3568-evb1-ddr4-v10-linux.img -j24

4.3 Recovery 編譯

進(jìn)入工程根目錄執(zhí)行以下命令自動(dòng)完成 Recovery 的編譯及打包。

<SDK>#./build.sh recovery

編譯后在 Buildroot 目錄 output/rockchip芯片型號(hào)recovery/images 生成 recovery.img。

需要特別注意 recovery.img 是包含 kernel.img,所以每次 Kernel 更改,Recovery 是需要重新打包生成。例如下:

<SDK>$source envsetup.sh rockchip_芯片名稱

<SDK>$make recovery-rebuild

<SDK>$./build.sh recovery

更多編譯說明請(qǐng)參考SDK發(fā)布文檔。

4.4 Buildroot 編譯

4.4.1 Rootfs 編譯

進(jìn)入工程目錄根目錄執(zhí)行以下命令自動(dòng)完成 Rootfs 的編譯及打包:

./build.sh rootfs

編譯后在 Buildroot 目錄 output/rockchip_芯片型號(hào)/images下生成 rootfs.ext4。

4.4.2 模塊編譯

比如 qplayer 模塊,常用相關(guān)編譯命令如下:

編譯 qplayer

SDK$make qplayer

重編 qplayer

SDK$make qplayer-rebuild

刪除 qplayer

SDK$make qplayer-dirclean

或者

SDK$rm -rf /buildroot/output/rockchip_芯片型號(hào)/build/qlayer-1.0

4.5 Debian 編譯

./build.sh debian

或進(jìn)入 debian/ 目錄:

cd debian/

后續(xù)的編譯和 Debian 固件生成請(qǐng)參考當(dāng)前目錄 readme.md。

Building base Debian system

sudo apt-get install binfmt-support qemu-user-static live-build

sudo dpkg -i ubuntu-build-service/packages/*

sudo apt-get install -f

編譯 32 位的 Debian:

RELEASE=buster TARGET=desktop ARCH=armhf ./mk-base-debian.sh

或編譯 64 位的 Debian:

RELEASE=butser TARGET=desktop ARCH=arm64 ./mk-base-debian.sh

編譯完成會(huì)在 debian/ 目錄下生成:linaro-buster-alip-xxxxx-1.tar.gz(xxxxx 表示生成時(shí)間戳)。

FAQ:

上述編譯如果遇到如下問題情況:

noexec or nodev issue /usr/share/debootstrap/functions: line 1450:

..../rootfs/ubuntu-build-service/buster-desktop-arm64/chroot/test-dev-null:

Permission denied E: Cannot install into target '/rootfs/ubuntu-build-

service/buster-desktop-arm64/chroot' mounted with noexec or nodev

解決方法:

mount -o remount,exec,dev xxx

(其中xxx 是?程?錄路徑,然后重新編譯)

另外如果還有遇到其他編譯異常,先排除使用的編譯系統(tǒng)是 ext2/ext4 的系統(tǒng)類型。

由于編譯 Base Debian 需要訪問國外網(wǎng)站,而國內(nèi)網(wǎng)絡(luò)訪問國外網(wǎng)站時(shí),經(jīng)常出現(xiàn)下載失敗的情況:

Debian 使用 live build,鏡像源改為國內(nèi)可以這樣配置:

32位系統(tǒng):

+++ b/ubuntu-build-service/buster-desktop-armhf/configure

@@ -11,6 +11,11 @@ set -e

echo "I: create configuration"

export LB_BOOTSTRAP_INCLUDE="apt-transport-https gnupg"

lb config \

+ --mirror-bootstrap "http://mirrors.163.com/debian" \

+ --mirror-chroot "http://mirrors.163.com/debian" \

+ --mirror-chroot-security "http://mirrors.163.com/debian-security" \

+ --mirror-binary "http://mirrors.163.com/debian" \

+ --mirror-binary-security "http://mirrors.163.com/debian-security" \

--apt-indices false \

--apt-recommends false \

--apt-secure false \

64位系統(tǒng):

--- a/ubuntu-build-service/buster-desktop-arm64/configure

+++ b/ubuntu-build-service/buster-desktop-arm64/configure

@@ -11,6 +11,11 @@ set -e

echo "I: create configuration"

export LB_BOOTSTRAP_INCLUDE="apt-transport-https gnupg"

lb config \

+ --mirror-bootstrap "http://mirrors.163.com/debian" \

+ --mirror-chroot "http://mirrors.163.com/debian" \

+ --mirror-chroot-security "http://mirrors.163.com/debian-security" \

+ --mirror-binary "http://mirrors.163.com/debian" \

+ --mirror-binary-security "http://mirrors.163.com/debian-security" \

--apt-indices false \

--apt-recommends false \

--apt-secure false \

如果其他網(wǎng)絡(luò)原因不能下載包,有預(yù)編生成的包分享在百度云網(wǎng)盤,放在當(dāng)前目錄直接執(zhí)行下一步操作。

Building rk-debian rootfs

編譯 32位的 Debian:

VERSION=debug ARCH=armhf ./mk-rootfs-buster.sh

或編譯 64位的 Debian:

VERSION=debug ARCH=arm64 ./mk-rootfs-buster.sh

Creating the ext4 image(linaro-rootfs.img)

./mk-image.sh

此時(shí)會(huì)生成 linaro-rootfs.img。

4.6 Yocto 編譯

進(jìn)入工程目錄根目錄執(zhí)行以下命令自動(dòng)完成 Rootfs 的編譯及打包:

./build.sh yocto

編譯后在 yocto/ build/lastest 目錄下生成 rootfs.img。

FAQ:

上面編譯如果遇到如下問題情況:

Please use a locale setting which supports UTF-8 (such as LANG=en_US.UTF-8).

Python can't change the filesystem locale after loading so we need a UTF-8 when Python starts or things won't work.

解決方法:

locale-gen en_US.UTF-8

export LANG=en_US.UTF-8 LANGUAGE=en_US.en LC_ALL=en_US.UTF-8

或者參考 HYPERLINK "https://webkul.com/blog/setup-locale-python3" 編譯后生成的 image 在 yocto/build/lastest/rootfs.img, 默認(rèn)用戶名登錄是 root。

Yocto 更多信息請(qǐng)參考 HYPERLINK "https://opensource.rock-chips.com/wiki_Yocto" 。

4.7 全自動(dòng)編譯

完成上述 Kernel/U-Boot/Recovery/Rootfs 各個(gè)部分的編譯后,進(jìn)入工程目錄根目錄執(zhí)行以下命令自動(dòng)完成所有的編譯:

./build.sh all # 只編譯模塊代碼(u-Boot,kernel,Rootfs,Recovery)

# 需要再執(zhí)行./mkfirmware.sh 進(jìn)行固件打包

./build.sh # 在./build.sh all基礎(chǔ)上

# 1. 增加固件打包 ./mkfirmware.sh

# 2. update.img打包

# 3. 復(fù)制rockdev目錄下的固件到IMAGE/***_RELEASE_TEST/IMAGES目錄

# 4. 保存各個(gè)模塊的補(bǔ)丁到IMAGE/***_RELEASE_TEST/PATCHES目錄

# 注:./build.sh 和 ./build.sh allsave 命令?樣

默認(rèn)是 Buildroot ,可以通過設(shè)置壞境變量 RK_ROOTFS_SYSTEM 指定 rootfs 。

比如需要 buildroot 可以通過以下命令進(jìn)行生成:

<SDK>$export RK_ROOTFS_SYSTEM=buildroot

<SDK>$./build.sh

具體參數(shù)使用情況,可 help 查詢,比如:

<SDK>$ ./build.sh --help

Usage: build.sh [OPTIONS]

Available options:

BoardConfig*.mk -switch to specified board config

Uboot -build uboot

spl -build spl

kernel -build kernel

modules -build kernel modules

toolchain -build toolchain

rootfs -build default rootfs, currently build buildroot as default

Buildroot -build buildroot rootfs

ramboot -build ramboot image

multi-npu_boot -build boot image for multi-npu board

yocto -build yocto rootfs

debian -build debian9 stretch rootfs

distro -build debian10 buster rootfs

pcba -build pcba

recovery -build recovery

all -build uboot, kernel, rootfs, recovery image

cleanall -clean uboot, kernel, rootfs, recovery

firmware -pack all the image we need to boot up system

updateimg -pack update image

otapackage -pack ab update otapackage image

save -save images, patches, commands used to debug

allsave -build all & firmware & updateimg & save

Default option is 'allsave'.

4.8M68 SDK編譯指導(dǎo)

4.8.1編譯

本小節(jié)主要介紹在搭載完編譯及下載好SDK源碼之后如何編譯固件

選擇環(huán)境

<SDK>$source envsetup.sh

<SDK>$lunch

Which would you like? [0]:M68選擇68 M66選擇66

編譯debain 10

<SDK>$export RK_ROOTFS_SYSTEM=debian

編譯

<SDK>$./build.sh

4.8.2開發(fā)

本小節(jié)主要介紹如何修改編譯的dts及其他config,在SDK中我們默認(rèn)了DTS的選擇及其他環(huán)境變量的配置。我們可以通過修改默認(rèn)的Boardconfig.mk去修改配置。

<SDK>$vi device/rockchip/rk356x/device/Boardconfig.mk

內(nèi)容如下:

# Uboot defconfig

export RK_UBOOT_DEFCONFIG=rk3568

# Kernel defconfig

export RK_KERNEL_DEFCONFIG=rockchip_linux_defconfig

# Kernel dts

export RK_KERNEL_DTS=rk3568-evb1-ddr4-v10-linux

# def debain 10

export RK_ROOTFS_SYSTEM=debain

//如果添加了此項(xiàng)則默認(rèn)編譯debain,則不需要在SDK目錄使用

//export RK_ROOTFS_SYSTEM=debain去重新指定系統(tǒng)

#set flash type support<emmc, nand, spi_nand, spi_nor>

export RK_STORAGE_TYPE=emmc

5. SDK 固件升級(jí)

本章節(jié)主要介紹如何將構(gòu)建完整的鏡像文件(image)燒寫并運(yùn)行在硬件設(shè)備上的流程。

Rockchip 平臺(tái)提供的幾種鏡像燒寫工具介紹如下所示,可以選擇合適的燒寫方式進(jìn)行燒寫。燒寫前,需

安裝最新的 USB 驅(qū)動(dòng),詳見 2.3.2 HYPERLINK \l "書簽3" 。

工具
系統(tǒng)
描述
RKDevTool
Windows
瑞芯微開發(fā)工具,分立升級(jí)固件及整個(gè) update 升級(jí)固件工具
FactoryTool
Windows
量產(chǎn)升級(jí)工具,支持 USB 一拖多燒錄
Linux_Upgrade_tool
Linux
Linux 下開發(fā)的工具,支持固件的升級(jí)

5.1 燒寫模式介紹

Rockchip 平臺(tái)硬件運(yùn)行的幾種模式如表所示,只有當(dāng)設(shè)備處于 Maskrom,及 Loader模式下,才能夠燒寫固件,或?qū)Π迳瞎碳M(jìn)行更新操作。

模式
工具燒錄
描述
Maskrom
支持
Flash 在未燒錄固件時(shí),芯片會(huì)引導(dǎo)進(jìn)? Maskrom 模式,可以進(jìn)行初次固件的燒寫;
開發(fā)調(diào)試過程中若遇到 Loader 無法正常啟動(dòng)的情況,也可進(jìn)入Maskrom 模式燒寫固件。
Loader
支持
Loader 模式下,可以進(jìn)行固件的燒寫、升級(jí)。
可以通過工具單獨(dú)燒寫某?個(gè)分區(qū)鏡像文件,方便調(diào)試。
Recovery
不支持
系統(tǒng)引導(dǎo) recovery 啟動(dòng),主要作?是升級(jí)、恢復(fù)出廠設(shè)置類操作。
Normal Boot
不支持
系統(tǒng)引導(dǎo) rootfs 啟動(dòng),加載 rootfs,大多數(shù)的開發(fā)都是在這個(gè)模式下調(diào)試的。

進(jìn)入燒寫模式方式以下幾種方法:

未燒錄過固件,上電,進(jìn)入 Maskrom 模式。

燒錄過固件,按住 recovery 按鍵上電或復(fù)位,系統(tǒng)將進(jìn)入 Loader 固件燒寫模式。

燒錄過固件,按住 Maskrom 按鍵上電或復(fù)位,系統(tǒng)將進(jìn)入 MaskRom 固件燒寫模式。

燒錄過固件,上電或復(fù)位后開發(fā)板正常進(jìn)?系統(tǒng)后,瑞芯微開發(fā)工具上顯示“發(fā)現(xiàn)一個(gè) ADB設(shè)備”或“發(fā)現(xiàn)一個(gè) MSC 設(shè)備”,然后點(diǎn)擊工具上的按鈕“切換”,進(jìn)入 Loader 模式。

燒錄過固件,可在串口或 ADB 命令行模式下,輸入 reboot loader 命令,進(jìn)入 Loader 模式。

5.1.1 Windows 刷機(jī)說明

SDK 提供 Windows 燒寫工具(工具版本需要 V2.84 或以上),工具位于工程根目錄:

tools/

├── windows/RKDevTool

如下圖,編譯生成相應(yīng)的固件后,設(shè)備燒寫需要進(jìn)入 MASKROM 或 BootROM 燒寫模式, 連接好 USB 下載線后,按住按鍵“MASKROM”不放并按下復(fù)位鍵“RST”后松手,就能進(jìn)入MASKROM 模式,加載編譯生成固件的相應(yīng)路徑后,點(diǎn)擊“執(zhí)行”進(jìn)行燒寫,也可以按 “recovery" 按鍵不放并按下復(fù)位鍵 “RST” 后松手進(jìn)入 loader 模式進(jìn)行燒寫,下面是 MASKROM 模式的分區(qū)偏移及燒寫文件。(注意: Windows PC 需要在管理員權(quán)限運(yùn)行工具才可執(zhí)行)

注:燒寫前,需安裝SDK目錄下 USB 驅(qū)動(dòng),驅(qū)動(dòng)詳見:

<SDK>/tools/windows/DriverAssitant_v5.11.zip

5.1.2 Linux 刷機(jī)說明

Linux下的燒寫工具位于 tools/linux目錄下(Linux_Upgrade_Tool 工具版本需要 V1.57 或以上),請(qǐng)確認(rèn)你的板子連接到 MASKROM/loader rockusb。比如編譯生成的固件在 rockdev 目錄下,升級(jí)命令如下:

sudo ./upgrade_tool ul rockdev/MiniLoaderAll.bin

sudo ./upgrade_tool di -p rockdev/parameter.txt

sudo ./upgrade_tool di -u rockdev/uboot.img

sudo ./upgrade_tool di -misc rockdev/misc.img

sudo ./upgrade_tool di -b rockdev/boot.img

sudo ./upgrade_tool di -recovery rockdev/recovery.img

sudo ./upgrade_tool di -oem rockdev/oem.img

sudo ./upgrade_tool di -rootfs rocdev/rootfs.img

sudo ./upgrade_tool di -userdata rockdev/userdata.img

sudo ./upgrade_tool rd

或升級(jí)打包后的完整固件:

sudo ./upgrade_tool uf rockdev/update.img

或在根目錄,機(jī)器在 MASKROM 狀態(tài)運(yùn)行如下升級(jí):

/rkflash.sh

5.1.3 系統(tǒng)分區(qū)說明

默認(rèn)分區(qū)說明 ( 下面是 RK3568 EVB 分區(qū)參考)

Number
Start (sector)
End (sector)
Size
Name
1
16384
24575
4096K
uboot
2
24576
32767
4096K
misc
3
32768
98303
32M
boot
4
98304
163839
32M
recovery
5
163840
229375
32M
bakcup
6
229376
12812287
6144M
rootfs
7
12812288
13074431
128M
oem
8
13074432
61071326
22.8G
userdata

uboot 分區(qū):供 uboot 編譯出來的 uboot.img。

misc 分區(qū):供 misc.img,給 recovery 使用。

boot 分區(qū):供 kernel 編譯出來的 boot.img。

recovery 分區(qū):供 recovery 編譯出的 recovery.img。

backup 分區(qū):預(yù)留,暫時(shí)沒有用,后續(xù)跟 Android 一樣作為 recovery 的 backup 使用。

rootfs 分區(qū):供 buildroot、debian 或 yocto 編出來的 rootfs.img。

oem 分區(qū):給?家使用,存放廠家的 APP 或數(shù)據(jù)。掛載在 /oem 目錄。

userdata 分區(qū):供 APP 臨時(shí)生成文件或給最終用戶使用,掛載在 /userdata 目錄下。

6. SDK 開發(fā)

6.1 U-Boot 開發(fā)

本節(jié)簡單介紹 U-Boot 基本概念和編譯的注意事項(xiàng),幫助客戶了解 RK 平臺(tái) U-Boot 框架,具體 U-Boot 開發(fā)細(xì)節(jié)可參考/docs/Common/U-Boot 目錄下《Rockchip-Developer-Guide-UBoot-*.pdf》。

6.1.1 U-Boot 簡介

Rockchip U-Boot next-dev 分支是 Rockchip 從 U-Boot 官方的 v2017.09 正式版本中切出來進(jìn)行開發(fā)的版本。目前在該平臺(tái)上已經(jīng)支持 RK 所有主流在售芯片。支持的功能主要有:

支持 RK Android 固件啟動(dòng);

支持 Android AOSP 固件啟動(dòng);

支持 Linux Distro 固件啟動(dòng);

支持 Rockchip miniloader 和 SPL/TPL 兩種 Pre-loader 引導(dǎo);

支持 LVDS、EDP、MIPI、HDMI、CVBS、RGB 等顯示設(shè)備;

支持 eMMC、Nand Flash、SPI Nand flash、SPI NOR flash、SD 卡、U 盤等存儲(chǔ)設(shè)備啟動(dòng);

支持 FAT、EXT2、EXT4 文件系統(tǒng);

支持 GPT、RK parameter 分區(qū)表;

支持開機(jī) LOGO、充電動(dòng)畫、低電管理、電源管理;

支持 I2C、PMIC、CHARGE、FUEL GUAGE、USB、GPIO、PWM、GMAC、eMMC、NAND、

Interrupt 等;

支持 Vendor storage 保存用戶的數(shù)據(jù)和配置;

支持 RockUSB 和 Google Fastboot 兩種 USB gadget 燒寫 eMMC;

支持 Mass storage、ethernet、HID 等 USB 設(shè)備;

支持通過硬件狀態(tài)動(dòng)態(tài)選擇 kernel DTB;

6.1.2 版本

RK 的 U-Boot ?共有兩個(gè)版本: v2014舊版本和v2017新版本,內(nèi)部名稱分別為rkdevelop和next-dev。用戶有兩個(gè)方式確認(rèn)當(dāng)前U-Boot是否為v2017版本。

方式1:確認(rèn)根目錄Makefile的版本號(hào)是否為2017。

#

## Chapter-1 SPDX-License-Identifier: GPL-2.0+

#

VERSION = 2017

PATCHLEVEL = 09

SUBLEVEL =

EXTRAVERSION =

NAME =

......

方式2:確認(rèn)開機(jī)第一行正式打印是否為 U-Boot 2017.09。

U-Boot 2017.09-01818-g11818ff-dirty (Nov 14 2019 - 11:11:47 +0800)

......

項(xiàng)目開源:v2017已開源且定期更新到Github: HYPERLINK "https://github.com/rockchip-linux/u-boot"

內(nèi)核版本:v2017要求RK內(nèi)核版本 >= 4.4

6.1.3 平臺(tái)編譯

6.1.3.1 下載rkbin

這是一個(gè)工具包倉庫,用于存放RK不開源的bin、腳本、打包工具。U-Boot 編譯時(shí)會(huì)從該倉庫索引相關(guān)

文件,打包生成loader、trust、uboot固件。rkbin和U-Boot工程必須保持同級(jí)目錄關(guān)系。

6.1.3.2 下載GCC

GCC編譯器使用gcc-linaro-6.3.1,放置于prebuilts目錄之內(nèi)。prebuilts和U-Boot保持同級(jí)目錄關(guān)系。如下:

// 32位:

prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf

// 64位:

prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/

6.1.3.3 選擇defconfig

在<SDK>/u-boot/configs目錄下有大部分的平臺(tái)defconfig

選擇于我們板子默認(rèn)的deconfig即可:

rk3566.config

rk3568_defconfig

6.1.3.4 編譯

./make.sh [board]               // [board]:configs/[board]_defconfig文件。

首次編譯:無論32位或64位平臺(tái),第一次或想重新指定defconfig,則編譯命令必須指定[board]。例如:

./make.sh rk3568                // build for rk3568_defconfig

二次編譯:無論32位或64位平臺(tái),如果要基于當(dāng)前".config"二次編譯,則編譯命令不用指定[board]:

./make.sh

注意:如果編譯時(shí)出現(xiàn)奇怪的問題導(dǎo)致編譯失敗,請(qǐng)嘗試 make distclean 后重新編譯。

固件生成:編譯完成后會(huì)在U-Boot根目錄下打包生成:trust、uboot、loader。

6.1.3.5 啟動(dòng)流程

RK平臺(tái)的U-Boot 啟動(dòng)流程如下,僅列出一些重要步驟:

start.s // 匯編環(huán)境

=> IRQ/FIQ/lowlevel/vbar/errata/cp15/gic   // ARM架構(gòu)相關(guān)的lowlevel初始化

=> _main

=> stack                               // 準(zhǔn)備好C環(huán)境需要的棧

// 【第?階段】C環(huán)境初始化,發(fā)起?系列的函數(shù)調(diào)?

=> board_init_f: init_sequence_f[]

initf_malloc

arch_cpu_init                 // 【SoC的lowlevel初始化】

serial_init                        // 串口初始化

dram_init                          // 【獲取ddr容量信

reserve_mmu                        // 從ddr末尾開始往低地址reserve內(nèi)存

reserve_video

reserve_uboot

reserve_malloc

reserve_global_data

reserve_fdt

reserve_stacks

dram_init_banksize

sysmem_init

setup_reloc                        // 確定U-Boot??要reloc的地址

// 匯編環(huán)境

=> relocate_code                       // 匯編實(shí)現(xiàn)U-Boot代碼的relocation

// 【第?階段】C環(huán)境初始化,發(fā)起?系列的函數(shù)調(diào)?

=> board_init_r: init_sequence_r[]

initr_caches                       // 使能MMU和I/Dcache

initr_malloc

bidram_initr

sysmem_initr

initr_of_live                      // 初始化of_live

initr_dm                           // 初始化dm框架

board_init                         // 【平臺(tái)初始化,最核?部分】

board_debug_uart_init          // 串口iomux、clk配置

init_kernel_dtb                // 【切到kernel dtb】!

clks_probe                     // 初始化系統(tǒng)頻率

regulators_enable_boot_on    // 初始化系統(tǒng)電源

io_domain_init                 // io-domain初始化

set_armclk_rate        // __weak,ARM提頻(平臺(tái)有需求才實(shí)現(xiàn))

dvfs_init                      // 寬溫芯?的調(diào)頻調(diào)壓

rk_board_init                  // __weak,由各個(gè)具體平臺(tái)進(jìn)?實(shí)現(xiàn)

console_init_r

board_late_init               // 【平臺(tái)late初始化】

rockchip_set_ethaddr           // 設(shè)置mac地址

rockchip_set_serialno          // 設(shè)置serialno

setup_boot_mode     // 解析"reboot xxx"命令

// 識(shí)別按鍵和loader燒寫模式、recovery

charge_display                 // U-Boot充電

rockchip_show_logo             // 顯?開機(jī)logo

soc_clk_dump                   // 打印clk tree

rk_board_late_init     // __weak,由各個(gè)具體平臺(tái)進(jìn)行實(shí)現(xiàn)

run_main_loop                      // 【進(jìn)?命令行模式,或執(zhí)行啟動(dòng)命令】

6.1.3.6 快捷鍵

RK平臺(tái)提供串口組合鍵觸發(fā)一些事件用于調(diào)試、燒寫(如果無法觸發(fā),請(qǐng)多嘗試幾次;啟用secure-boot 時(shí)無效)。開機(jī)時(shí)長按:

ctrl+c:進(jìn)入 U-Boot 命令行模式;

ctrl+d:進(jìn)入 loader 燒寫模式;

ctrl+b:進(jìn)入 maskrom 燒寫模式;

ctrl+f:進(jìn)入 fastboot 模式;

ctrl+m:打印 bidram/system 信息;

ctrl+i:使能內(nèi)核 initcall_debug;

ctrl+p:打印 cmdline 信息;

ctrl+s:"Starting kernel..."之后進(jìn)入 U-Boot 命令行;

6.2 Kernel 開發(fā)

本節(jié)簡單介紹內(nèi)核一些常見配置的修改,主要是 dts 的配置,幫助客戶更快更方便的進(jìn)行一些簡單的修改。Kernel 版本以 4.4 作為基準(zhǔn),做相應(yīng)的介紹。

6.2.1 DTS 介紹

6.2.1.1 DTS 概述

早期版本的 Linux Kernel 是直接在板級(jí)配置文件配置板?相關(guān)的信息,如 IOMUX,默認(rèn)拉高/低的GPIO,每個(gè) I2C/SPI 總線下的 client 設(shè)備信息。為了摒棄這種‘hard code' 的方式,Linux引入設(shè)備樹(Device Tree)的概念來描述不同的硬件結(jié)構(gòu)。

Device Tree 數(shù)據(jù)可讀性較高,遵循 DTS 規(guī)范,通常被描述在.dtsi 和.dts 源文件。在內(nèi)核編譯的過程中,被編譯為.dtb 的二進(jìn)制文件。在開機(jī)啟動(dòng)階段,dtb 會(huì)被 bootloader(如 U-Boot)加載到 RAM 的某個(gè)地址空間,并且將該地址作為參數(shù)傳遞給 Kernel space。內(nèi)核解析整個(gè) dtb 文件,提煉每個(gè)設(shè)備信息以初始化。

本文旨在介紹如何新增一個(gè)的板子 dts 配置以及一些常見的 dts 語法說明,關(guān)于更詳細(xì) dts 的語法介紹不在本文范圍內(nèi),如有興趣,請(qǐng)參考: HYPERLINK "https://www.devicetree.org/specifications/" 和 HYPERLINK "https://www.kernel.org/doc/Documentation/devicetree/bindings/"

6.2.1.2 新增一個(gè)產(chǎn)品 DTS

創(chuàng)建 dts 文件

Linux Kernel 目前支持多平臺(tái)使用 dts,RK 平臺(tái)的 dts 文件存放于:

ARM:arch/arm/boot/dts/

ARM64:arch/arm64/boot/dts/rockchip

一般 dts 文件的命名規(guī)則為”soc-board-name.dts”,如 rk3568-evb-ddr4-linux.dts。

soc 指的是芯片型號(hào),board_name 一般是根據(jù)板子絲印來命名。

如果你的板子是一體板,則只需要一個(gè) dts 文件來描述即可。

如果硬件設(shè)計(jì)上是核心板和底板的結(jié)構(gòu),或者產(chǎn)品有多個(gè)產(chǎn)品形態(tài),可以把公用的硬件描述放在 dtsi 文件,而 dts 文件則描述不同的硬件模塊,并且通過 include "xxx.dtsi"將公用的硬件描述包含進(jìn)來。

├──rk3568-evb-ddr4-linux.dts

│├──rk3568-evb.dtsi

│└── rk33568.dtsi

修改 dts 所在目錄的 Makefile

--- a/arch/arm64/boot/dts/rockchip/Makefile

+++ b/arch/arm64/boot/dts/rockchip/Makefile

@@ -50,6 +50,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3368-tablet.dtb

dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb.dtb

dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568.dtb

+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb-ddr4-linux.dtb

編譯 Kenrel 的時(shí)候可以直接 make dts-name.img(如 rk3568-evb-ddr4-linux.img),即可生成對(duì)應(yīng)的 boot.img(包含 dtb 數(shù)據(jù))。

dts 語法的幾個(gè)說明

dts 語法可以像 c/c++?樣,通過#include xxx.dtsi 來包含其他公?的 dts 數(shù)據(jù)。dts 文件將繼承包含的 dtsi 文件的所有設(shè)備節(jié)點(diǎn)的屬性和值。如 property 在多個(gè) dts/dtsi 文件被定義,它的值最終為 dts 的定義。所有和芯片相關(guān)的控制器節(jié)點(diǎn)都會(huì)被定義在 soc.dtsi,如需使能該設(shè)備功能,需要在 dts 文件中設(shè)置其 status 為"okay"。關(guān)閉該設(shè)備,需要在 dts 文件中設(shè)置其 status 為"disabled"。

/dts-v1/;

#include "rk3399-evb-ind.dtsi"

#include "rk3399-linux.dtsi"

...

&i2s2 {

#sound-dai-cells = <0>;

status = "okay";

};

&hdmi_sound {

status = "okay";

};

6.2.2 內(nèi)核模塊開發(fā)文檔

\docs\Common\目錄下分功能模塊發(fā)布了對(duì)應(yīng)的開發(fā)文檔,本節(jié)主要對(duì)這些開發(fā)文檔進(jìn)行一個(gè)歸納索引,大家結(jié)合實(shí)際開發(fā)遇到的問題,參照以下表格閱讀學(xué)習(xí)對(duì)應(yīng)的開發(fā)指南。

模塊功能
子目錄
對(duì)應(yīng)文檔
音頻
Audio
Rockchip_Developer_Guide_Audio_CN.pdf
顯示
DISPLAY
Rockchip_Developer_Guide_HDMI-CEC_CN.pdf
Rockchip_Developer_Guide_HDMI_CN.pdf
Rockchip_Developer_Guide_HDMI-PHY-PLL_Config_CN.pdf
Rockchip_DRM_Display_Driver_Development_Guide_V1.0.pdf
rockchip_drm_integration_helper-zh.pdf
Rockchip_DRM_Panel_Porting_Guide_V1.6_20190228.pdf
Rockchip_DRM_RK628_Porting_Guide_CN.pdf
USB
USB
Rockchip_Developer_Guide_Linux_USB_Initialization_Log_Analysis_CN.pdf
Rockchip_Developer_Guide_Linux_USB_Performance_Analysis_CN.pdf
Rockchip_Developer_Guide_USB2_Compliance_Test_CN.pdf
Rockchip_Developer_Guide_Linux_USB_PHY_CN.pdf
Rockchip_Developer_Guide_USB_CN.pdf
Rockchip_Developer_Guide_USB_EN.pdf
Rockchip_Developer_Guide_USB_FFS_Test_Demo_CN.pdf
Rockchip_Developer_Guide_USB_Gadget_UAC_CN.pdf
Rockchip_Developer_Guide_USB_SQ_Test_CN.pdf
Rockchip_RK3399_Developer_Guide_USB_DTS_CN.pdf
Rockchip_RK356x_Developer_Guide_USB_CN.pdf
Rockchip_Trouble_Shooting_Linux4.19_USB_Gadget_UVC_CN.pdf
I2C
I2C
Rockchip_Developer_Guide_I2C_CN.pdf
IOMMU
IOMMU
Rockchip_Developer_Guide_Linux_IOMMU_CN.pdf
MMC
MMC
Rockchip_Developer_Guide_SD_Boot_CN.pdf
Rockchip_Developer_Guide_SDMMC_SDIO_eMMC_CN.pdf
PCIe
PCIe
Rockchip_Developer_Guide_Linux4.4_PCIe_CN.pdf
Rockchip_RK356X_Developer_Guide_PCIe_CN.pdf
GPIO
Pin-Ctrl
Rockchip-Developer-Guide-Linux-Pin-Ctrl-CN.pdf
Rockchip_Problem_Shooting_Linux_GPIO_CN.pdf
電源、
功耗
Power
Rockchip_Developer_Guide_Power_Analysis_CN.pdf
Rockchip_Developer_Guide_Power_Analysis_EN.pdf
SARADC
SARADC
Rockchip_Developer_Guide_Linux_SARADC_CN.pdf
溫控
THERMAL
Rockchip_Developer_Guide_Thermal_CN.pdfRockchip_Developer_Guide_Thermal_EN.pdf
TRUST
TRUST
Rockchip_Developer_Guide_Trust_CN.pdfRockchip_Developer_Guide_Trust_EN.pdfRockchip_RK3308_Developer_Guide_System_Suspend_CN.pdfRockchip_RK3308_Developer_Guide_System_Suspend_EN.pdfRockchip_RK3399_Developer_Guide_System_Suspend_CN.pdf
U-Boot
U-Boot
Rockchip_Developer_Guide_Linux_AB_System_CN.pdfRockchip_Developer_Guide_UBoot_MMC_Device_Analysis_CN.pdfRockchip_Developer_Guide_UBoot_MTD_Block_Device_Design_CN.pdfRockchip_Developer_Guide_UBoot_Nextdev_CN.pdfRockchip_Introduction_UBoot_rkdevelop_vs_nextdev_CN.pdf
看門狗
WATCHDOG
Rockchip_Developer_Guide_Linux_WDT_CN.pdfRockchip_Developer_Guide_Linux_WDT_EN.pdf
Clock
時(shí)鐘配置
CRU
Rockchip-Clock-Developer-Guide-RTOS-CN.pdfRockchip_RK3399_Developer_Guide_Linux4.4_Clock_CN.pdf
JTAG GDB等常用調(diào)試
DEBUG
Rockchip_Developer_Guide_DS5_CN.pdfRockchip_Developer_Guide_GDB_Over_ADB_CN.pdfRockchip_Developer_Guide_OpenOCD_CN.pdfRockchip_User_Guide_J-Link_CN.pdf
CPU/GPU等頻率電壓調(diào)節(jié)
DVFS
Rockchip_Developer_Guide_CPUFreq_CN.pdfRockchip_Developer_Guide_CPUFreq_EN.pdfRockchip_Developer_Guide_Devfreq_CN.pdfRockchip_Developer_Guide_Devfreq_EN.pdf
以太網(wǎng)
配置
GMAC
Rockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_CN.pdfRockchip_Developer_Guide_Linux_GMAC_RGMII_Delayline_EN.pdfRockchip_Developer_Guide_Linux_GMAC_CN.pdfRockchip_Developer_Guide_Linux_GMAC_Mode_Configuration_CN.pdfRockchip_Developer_Guide_Linux_MAC_TO_MAC_CN.pdf
GPIO
電源域
IO-DOMAIN
Rockchip_Developer_Guide_Linux_IO_DOMAIN_CN.pdf
PMIC
電量計(jì)、DCDC
PMIC
Rockchip_Developer_Guide_Power_Discrete_DCDC_EN.pdfRockchip_RK805_Developer_Guide_CN.pdfRockchip_RK808_Developer_Guide_CN.pdfRockchip_RK809_Developer_Guide_CN.pdfRockchip_RK816_Developer_Guide_CN.pdfRockchip_RK817_Developer_Guide_CN.pdfRockchip_RK818_Developer_Guide_CN.pdfRockchip_RK818_RK816_Developer_Guide_Fuel_Gauge_CN.pdfRockchip_RK818_RK816_Introduction_Fuel_Gauge_Log_CN.pdf
PWM
PWM
Rockchip_Developer_Guide_Linux_PWM_CN.pdfRockchip_Developer_Guide_Linux_PWM_EN.pdf
SPI
SPI
Rockchip_Developer_Guide_Linux_SPI_CN.pdfRockchip_Developer_Guide_Linux_SPI_EN.pdf
串口通信
UART
Rockchip_Developer_Guide_UART_CN.pdfRockchip_Developer_Guide_UART_EN.pdf

6.2.3 GPIO

M68和M66 有 5 組 GPIO bank:GPIO0~GPIO4,每組又以 A0~A7, B0~B7, C0~C7, D0~D7 作為編號(hào)區(qū)分,以下為gpio引腳計(jì)算公式:

GPIO pin腳計(jì)算公式:pin = bank * 32 + number

GPIO 小組編號(hào)計(jì)算公式:number = group * 8 + X

所有的 GPIO 都默認(rèn)為輸入(input),可以用作中斷,軟件配置可控為上拉或者下拉,GPIO 的驅(qū)動(dòng)能力軟件可以配置。關(guān)于原理圖上的 GPIO 跟dts里面的 GPIO 的對(duì)應(yīng)關(guān)系,例如 GPIO4c0,那么對(duì)應(yīng)的 dts 里面應(yīng)該是“gpio4 16”。

GPIO的使用應(yīng)主要是否有引腳復(fù)用:

使用IO 命令查看寄存器的值配置在什么狀態(tài)

Io -4 -r 寄存器地址 //寄存器地址及狀態(tài)值需參考RK TRM文檔

使用cat pinmux-pins命令查看復(fù)用情況

cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins

如果在dts存在復(fù)用情況則關(guān)閉對(duì)應(yīng)label

參考文檔:docs\Kernel\Pin-Ctrl\目錄下《Rockchip Pin-Ctrl 開發(fā)指南V1.0-20160725.pdf》

6.2.4UART

M68共10路uart口分別是uart0-uart9。

debug口

支持串口作為控制臺(tái)使用。M68和M66默認(rèn)使用uart2作為調(diào)試串口。

chosen: chosen {

bootargs = "earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rw rootwait";

};//參數(shù)含義 0xfe660000必須對(duì)應(yīng)使用的uart口地址 ttyFIQ0設(shè)備將被注冊(cè)成/dev/ttyFIQ0

fiq-debugger {

compatible = "rockchip,fiq-debugger";

rockchip,serial-id = <2>;

rockchip,wake-irq = <0>;

rockchip,irq-mode-enable = <1>;

rockchip,baudrate = <1500000>; //只能使用1500000和115200

interrupts = <0 252 8>;

pinctrl-names = "default";

pinctrl-0 = <&uart2m0_xfer>;

status = "okay";

};

&uart2 {

status = “disabled”; //如果uart2作為調(diào)試串口則此節(jié)點(diǎn)必須關(guān)閉。

};

dts配置:

如果修改之后調(diào)試串口依舊不能使用可修改paremeter.txt,添加調(diào)試串口:

CMDLINE:

console=ttyFIQ0 androidboot.console=ttyFIQ0 //添加控制臺(tái)

串口

dts配置rk3568-evb1-ddr4-v10-linux.dts

&uart3 {

pinctrl-names = "default";

pinctrl-0 = <&uart3m0_xfer>;

status = "okay";

};

串口調(diào)試也要注意是否復(fù)用,及確認(rèn)硬件使用的是uart0m0 還是uart0m1。

參考文檔 /docs/Common/uart/目錄下《Rockchip_Developer_Guide_UART_CN.pdf》

6.2.5i2c

M68有6個(gè)i2c控制器分別為i2c0~i2c5;其中i2c2~i2c5區(qū)分M0和M1具體使用看硬件走線。

通訊嚴(yán)格遵守i2c協(xié)議。一個(gè)i2c可掛載多個(gè)從設(shè)備。I2c有競爭仲裁機(jī)制,理論是可掛載127個(gè)設(shè)備。M68 和M66 i2c0外接PMU(power management unit)RK809.拿到板子及SDK請(qǐng)確認(rèn)電源域是否與硬件原理圖要求一致。

i2c調(diào)試

如果遇到i2c不通的情況,請(qǐng)確認(rèn)i2c地址,i2c電壓,i2c使用M0還是m1等沒有錯(cuò)誤。

可以使用底層命令去測(cè)試設(shè)備是否掛載以及是否正常通訊:

i2cdetect -r -y 3 查看i2c3上掛載的設(shè)備

i2cdump -f -y 3 0x43 查看器件所有寄存器的值,以總線3上0x43 這個(gè)器件為例

i2cget -f -y 3 0x43 0x01 看單個(gè)寄存器地址, 以總線3上0x43 0x01這個(gè)寄存器為例

i2cset -f -y 3 0x43 0x03 0x7f操作寄存器值, 以總線3上0x43 0x03這個(gè)寄存器為例

dts配置rk3568-evb1-ddr4-v10-linux.dts

&i2c4 {

clock-frequency = <400000>; //默認(rèn)400000

pinctrl-names = "default";

pinctrl-0 = <&i2c4m0_xfer>;

status = "okay";

gc8034: gc8034@37 {

…………………………

};

};

參考文檔 /docs/Common/I2C/目錄下《Rockchip_Developer_Guide_I2C_CN.pdf》

6.2.6 USB

M66和M68集成了2個(gè)HOST控制器集成EHCI/OHCI(usb1.0/usb2.0)2個(gè)  HYPERLINK "https://bbs.16rd.com/citiao-jishu-OTG.html" \t "https://bbs.16rd.com/_blank"  控制器集成DWC3/xHCI(usb3.0/usb2.0)

M68底板集成一個(gè)USBHUB IC ,4G USB接口由HUB上引出,如需添加4G模塊,請(qǐng)確認(rèn)HUB狀態(tài)及5V電壓是否正常并在usb驅(qū)動(dòng)添加模組的uid及vid,具體添加4G模組參考對(duì)應(yīng)廠商提供的參考文檔。

具體USB驅(qū)動(dòng)加載以及dts配置請(qǐng)參考文檔:

/docs/Common/usb/目錄下《Rockchip_Developer_Guide_USB_CN.pdf》

6.2.7網(wǎng)口

M68有兩個(gè)百兆網(wǎng)口,都使用的RTL8201F PHYIC。為Ouput模式即MAC提供50M時(shí)鐘給PYH。

調(diào)試過程注意復(fù)用使用cat/sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins

查看對(duì)應(yīng)接口狀態(tài)是否正確。dts參考配置:

&gmac0 {

phy-mode = "rmii"; //百兆網(wǎng)口rmii 千兆rgmii

clock_in_out = "output"; //output or input

snps,reset-gpio = <&gpio4 20 1>;

snps,reset-active-low;

snps,reset-delays-us = <0 20000 100000>;

assigned-clocks = <&cru 389>, <&cru 386>;

assigned-clock-parents = <&cru 388>;

assigned-clock-rates = <0>, <50000000>;

pinctrl-names = "default";

pinctrl-0 = <&gmac0_miim &gmac0_clkinout &gmac0_rx_bus2 &gmac0_tx_bus2 &gmac0_rx_er>;

phy-handle = <&rmii_phy0>;

status = "okay";

};

&gmac1 {

phy-mode = "rmii";

clock_in_out = "output";

snps,reset-gpio = <&gpio4 26 1>;

snps,reset-active-low;

snps,reset-delays-us = <0 20000 100000>;

assigned-clocks = <&cru 393>, <&cru 390>;

assigned-clock-parents = <&cru 392>;

assigned-clock-rates = <0>, <50000000>;

pinctrl-names = "default";

pinctrl-0 = <&gmac1m1_miim &gmac1m1_clkinout &gmac1m1_rx_bus2 &gmac1m1_tx_bus2 &gmac1m1_rx_er>;

phy-handle = <&rmii_phy1>;

status = "okay";

};

&mdio0 {

rmii_phy0: phy@0 {

compatible = "ethernet-phy-ieee802.3-c22";

reg = <0x0>; //phyaddr 具體看原理圖,寫0代表廣播

};

};

參考文檔 /docs/Common/GMAC/目錄下《Rockchip_Developer_Guide_Ethernet_CN.pdf》

6.2.8顯示

M68顯示支持mipi dsi 及edp接口和hdmi。

Hdmi

目前M68已支持HDMI顯示,只需打開dts中HDMI節(jié)點(diǎn)即可

&hdmi {

status = "okay";

rockchip,phy-table =

<92812500 0x8009 0x0000 0x0270>,

<165000000 0x800b 0x0000 0x026d>,

<185625000 0x800b 0x0000 0x01ed>,

<297000000 0x800b 0x0000 0x01ad>,

<594000000 0x8029 0x0000 0x0088>,

<000000000 0x0000 0x0000 0x0000>;

};

參考文檔/docs/Common/display/目錄下《Rockchip_Developer_Guide_HDMI_CN.pdf》

Edp

M68支持edp接口dts參考如下:

panel {

compatible = "simple-panel";

backlight = <&backlight>; //背光節(jié)點(diǎn)需要打開

enable-gpios = <&gpio0 19 0>;

prepare-delay-ms = <20>;

enable-delay-ms = <20>;

display_timings {

native-mode = <&timing_0>;

timing_0: timing0 {

clock-frequency = <147000000>; //clock-frequency計(jì)算方法:(ha+hfp+hs+hbp)*(va+vfp+vs+vbp)*60

hactive = <1920>; //具體屏參由屏廠提供

vactive = <1080>;

hfront-porch = <48>;

hsync-len = <32>;

hback-porch = <212>;

vfront-porch = <6>;

vsync-len = <3>;

vback-porch = <75>;

hsync-active = <0>;

vsync-active = <0>;

de-active = <0>;

pixelclk-active = <0>;

}

}

ports {

panel_in_edp:endpoint{

remote-endpoint = <&edp_out_panel>;

};

};

};

ports {

panel_in_edp:endpoint{

remote-endpoint = <&edp_out_panel>;

}; }; };

&edp {

force-hpd;

status = "okay";

ports{

port@1{

reg = <1>;

edp_out_panel:endpoint{

remote-endpoint = <&panel_in_edp>;

}; }; };};

&edp_phy {

status = "okay";

};

&edp_in_vp1 { //如果使用vop1則vop0必須關(guān)閉

status = "okay";

};

&edp_in_vp0 {

status = "disabled";

};

&route_edp{

connect = <&vp1_out_edp>;

status = "okay";

};

MIPI DSI

M68支持MIPI 4lans接口參考dts配置

&dsi1 {

status = "disabled";

dsi1_panel: panel@0 {

status = "okay";

compatible = "simple-panel-dsi";

reg = <0>;

backlight = <&backlight>;

reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>;

init-delay-ms = <60>;

reset-delay-ms = <60>;

unprepare-delay-ms = <60>;

disable-delay-ms = <60>;

dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |

MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;

dsi,format = <MIPI_DSI_FMT_RGB888>;

dsi,lanes = <4>;

panel-init-sequence = [ //初始化代碼具體由屏廠提供

05 1E 01 29

05 78 01 11

];

panel-exit-sequence = [

05 0A 01 28

05 78 01 10

];

disp_timings1: display-timings {

native-mode = <&dsi1_timing0>;

dsi1_timing0: timing0 {

…………//timimg配置具體由屏廠提供

};

};

ports {

#address-cells = <1>;

#size-cells = <0>;

port@0 {

reg = <0>;

panel_in_dsi1: endpoint {

remote-endpoint = <&dsi1_out_panel>;

};};};

};

ports {

#address-cells = <1>;

#size-cells = <0>;

port@1 {

reg = <1>;

dsi1_out_panel: endpoint {

remote-endpoint = <&panel_in_dsi1>;

};};};

};

&dsi1_in_vp0 {

status = "okay";

};

&video_phy1 {

status = "okay";

};

dsi,format = <MIPI_DSI_FMT_RGB888>;

dsi,lanes = <4>;

panel-init-sequence = [ //初始化代碼具體由屏廠提供

05 1E 01 29

05 78 01 11

];

panel-exit-sequence = [

05 0A 01 28

05 78 01 10

];

disp_timings1: display-timings {

native-mode = <&dsi1_timing0>;

dsi1_timing0: timing0 {

…………//timimg配置具體由屏廠提供

};

};

ports {

#address-cells = <1>;

#size-cells = <0>;

port@0 {

reg = <0>;

panel_in_dsi1: endpoint {

remote-endpoint = <&dsi1_out_panel>;

};};};

};

ports {

#address-cells = <1>;

#size-cells = <0>;

port@1 {

reg = <1>;

dsi1_out_panel: endpoint {

remote-endpoint = <&panel_in_dsi1>;

};};};

};

&dsi1_in_vp0 {

status = "okay";

};

&video_phy1 {

status = "okay";

};

6.2.9can

M68引出一路can接口,CAN(Controller Area Network)總線,即控制器局域網(wǎng)總線。

dts參考:

&can1 {

assigned-clocks = <&cru 323>;

assigned-clock-rates = <150000000>; //修改can口時(shí)鐘頻率

pinctrl-names = "default";

pinctrl-0 = <&can1m1_pins>;

status = "okay";

};

CAN 通信測(cè)試:

#在收發(fā)端關(guān)閉

can0設(shè)備ip link set can0 down

#在收發(fā)端設(shè)置比特率為250Kbps

ip link set can0 type can bitrate 250000

#在收發(fā)端打開can0設(shè)備

ip link set can0 up

#在接收端執(zhí)行candump,阻塞等待報(bào)文

candump can0

#在發(fā)送端執(zhí)行cansend,發(fā)送報(bào)文

cansend can0 123#123456789

參考文檔/docs/Common/display/目錄下《Rockchip_Developer_Guide_DRM_Panel_Porting_CN.pdf》

6.2.10 CPU、GPU、DDR 頻率修改

DVFS(Dynamic Voltage and Frequency Scaling)動(dòng)態(tài)電壓頻率調(diào)節(jié),是一種實(shí)時(shí)的電壓和頻率調(diào)節(jié)技術(shù)。目前 4.4 內(nèi)核中支持 DVFS 的模塊有 CPU、GPU、DDR。CPUFreq 是內(nèi)核開發(fā)者定義的一套支持動(dòng)態(tài)調(diào)整 CPU 頻率和電壓的框架模型。它能有效的降低 CPU 的功耗,同時(shí)兼顧 CPU 的性能。CPUFreq 通過不同的變頻策略,選擇?個(gè)合適的頻率供CPU使用,目前的內(nèi)核版本提供了以下幾種策略:

interactive:根據(jù) CPU 負(fù)載動(dòng)態(tài)調(diào)頻調(diào)壓;

conservative:保守策略,逐級(jí)調(diào)整頻率和電壓;

ondemand:根據(jù) CPU 負(fù)載動(dòng)態(tài)調(diào)頻調(diào)壓,比 interactive 策略反應(yīng)慢;

userspace:用戶自己設(shè)置電壓和頻率,系統(tǒng)不會(huì)自動(dòng)調(diào)整;

powersave:功耗優(yōu)先,始終將頻率設(shè)置在最低值;

performance:性能優(yōu)先,始終將頻率設(shè)置為最高值;

詳細(xì)的模塊功能及配置,請(qǐng)參考o(jì)cs/Common/DVFS/目錄下文檔。ARM/GPU/DDR 分別有對(duì)應(yīng)的調(diào)試接口,可以通過 ADB 命令進(jìn)?操作,對(duì)應(yīng)的接口目錄如下:

CPU小核:/sys/devices/system/cpu/cpu0/cpufreq/

CPU大核: /sys/devices/system/cpu/cpu4/cpufreq/

GPU:/sys/class/devfreq/ff9a0000.gpu/

DDR: /sys/class/devfreq/dmc/

這些目錄下有如下類似節(jié)點(diǎn):

available_frequencies:顯示支持的頻率

available_governors:顯示支持的變頻策略

cur_freq:顯示當(dāng)前頻率

governor:顯示當(dāng)前的變頻策略

max_freq:顯示當(dāng)前最高能跑的頻率

min_freq:顯示當(dāng)前最低能跑的頻率

以M68 M66 GPU 為例進(jìn)行定頻操作,流程如下:查看支持哪些頻率:

cat sys/class/devfreq/fde60000.gpu/available_frequencies

切換變頻策略:

echo userspace > sys/class/devfreq/fde60000.gpu/governor

定頻

echo 400000000 > sys/class/devfreq/fde60000.gpu/userspace/set_freq

cat /sys/class/devfreq/ff9a0000.gpu/cur_freq

6.3 Recovery 開發(fā)

6.3.1 簡介

Recovery機(jī)制的開發(fā),類似Android的Recovery功能開發(fā)。主要作用是擦除用戶數(shù)據(jù)和系統(tǒng)升級(jí)。

Linux中Recovery 模式是在設(shè)備上多?個(gè)Recovery分區(qū),該分區(qū)由kernel+resource+ramdisk 組成,主要用于升級(jí)操作。u-boot會(huì)根據(jù)misc分區(qū)存放的字段來判斷將要引導(dǎo)的系統(tǒng)是Normal 系統(tǒng)還是Recovery 系統(tǒng)。由于系統(tǒng)的獨(dú)立性,所以Recovery模式能保證升級(jí)的完整性,即升級(jí)過程被中斷,如異常掉電,升級(jí)仍然能繼續(xù)執(zhí)行。

6.3.2 調(diào)試

常用調(diào)試手段是開啟debug

buildroot/output/rockchip 芯片型號(hào) recovery/target 目錄下創(chuàng)建?個(gè)隱藏文件.rkdebug,

touch .rkdebug

Recovery 模式中升級(jí)的 log 在串口中打印出來。另外一種是通過查看 userdata/recovery/Log 文件

更多Recovery開發(fā)資料,參考文檔/docs/Linux/Recovery/Rockchip_Developer_Guide_Linux_Recovery_CN.pdf

6.4 Buildroot 開發(fā)

M68以及M66已經(jīng)配置好壞境變量,BSP配置和各模塊開發(fā),方便客戶開發(fā)和定制。默認(rèn)使用的config為:<SDK>/buildroot/configs/rockchip_rk3568_defconfig客戶可以通過使用

make ARCH=arm64 menuconfig來對(duì)buildroot進(jìn)行裁剪

6.4.1 環(huán)境變量的設(shè)定

source ./envsetup.sh (config_name)

6.4.2 編譯模塊和系統(tǒng)

選好編譯平臺(tái),接下來就可以編譯每?個(gè)package,它主要是config、build、install三部分組成

make <package>-reconfigure

make <package>-rebuild

make <package>-reinstall

清理包命令如下:

make <package>-dirclean

編譯Buildroot系統(tǒng),直接make即可

Make

6.4.3 開發(fā)相關(guān)模塊

相關(guān)package的開發(fā),可以參考 <SDK>/buildroot/package/*, 其中package/rockchip是Rockchip開發(fā)的 相關(guān)package.

6.4.4 定制相關(guān)模塊

參考/buildroot/configs/rockchip* 配置開關(guān),各模塊可自行定制開發(fā)。

buildroot$ tree configs/rockchip/

├── adbd.config

├── arm_a7.config

├── audio.config

├── audio_gst.config

├── base.config

├── base_extra.config

├── benchmark.config

├── bt.config

├── camera.config

├── camera_gst.config

├── chromium.config

├── debug.config

├── demo.config

├── display.config

├── freerdp.config

├── game.config

├── gdb.config

├── gpu.config

├── kernel_4_4.config

├── network.config

├── ntfs.config

...

6.5 Debian 開發(fā)

Rockchip提供了對(duì)Debian 10/11的?持,基于X11的顯示架構(gòu)。系統(tǒng)基于Linaro版本。添加一些圖形和視頻加速的支持。它包括libmali、xserver、gstreamer rockchip等package,這些packages通過docker搭建編譯相關(guān)deb包,存放在/debian/packages/*。

Docker搭建編譯deb package參考文檔

<SDK>/docs/Linux/ApplicationNote/Rockchip_Developer_Guide_Debian_Docker_EN.pdf

如果從網(wǎng)絡(luò)中獲取的時(shí)間與實(shí)際時(shí)間不一致,請(qǐng)?jiān)O(shè)置時(shí)區(qū)為中國上海

root#cp /usr/share/zoneinfo/Asia/ShangHai etc/localtime

也可在SDK中修改./debian/binary/etc/localtime設(shè)置時(shí)區(qū)

M68及M66 debian圖形顯示適配方案:X11/Xserver?前搭配是LXDE/XFCE輕量級(jí)桌?環(huán)境,桌?管理器使?lightdm,默認(rèn)桌面環(huán)境為lxde

LXDE桌面環(huán)境提供了一些基礎(chǔ)功能,如,攝像頭預(yù)覽,文件管理器,多媒體播放器,WiFi/BT 連接等。

Debian開發(fā)文檔參考

<SDK>/docs/Linux/ApplicationNote/Rockchip_Developer_Guide_Debian_CN.pdf

6.6 Yocto 開發(fā)

更多資料參考: HYPERLINK "https://opensource.rock-chips.com/wiki_Yocto"

6.7 多媒體開發(fā)

通過gstreamer/rockit來在rockchip平臺(tái)上做multimedia的開發(fā)

vpu_service --> mpp --> gstreamer --> app

vpu_service: 驅(qū)動(dòng)

mpp: rockchip平臺(tái)的視頻編解碼中間件,相關(guān)說明參考mpp?檔

gstreamer: 對(duì)接app的組件

目前rockchip提供的完整solution是基于gstreamer的,使用gstreamer的好處就是可以比較方便的基于pipeline的方式完整播放器,編碼器這些應(yīng)用。

具體資料參考:

/docs/Linux/Multimedia

├── Rockchip_Developer_Guide_Linux_DLNA_CN.pdf

├── Rockchip_Developer_Guide_Linux_RGA_CN.pdf

├── Rockchip_Developer_Guide_MPP_CN.pdf

└── Rockchip_Developer_Guide_MPP_EN.pdf

6.8 Grahpics 開發(fā)

Rockchip Linux平臺(tái)的Graphics,是應(yīng)用DRM和DMA-BUF的ARM Linux平臺(tái)。優(yōu)勢(shì)是,通用的架構(gòu),在基于此架構(gòu)進(jìn)?客制化開發(fā)較容易,可以利用很多現(xiàn)有組件,現(xiàn)有很多基礎(chǔ)開源項(xiàng)目的開發(fā),都開始基于Rockchip平臺(tái)來作為ARM端的適配平臺(tái)。但缺點(diǎn)是,很多人不是很理解這些內(nèi)容,實(shí)際應(yīng)用起來需要一個(gè)學(xué)習(xí)過程。更多資料可以參考Rockchip wiki和下面文檔。

<SDK>/docs/Linux/Graphics/

├── Rockchip_Developer_Guide_Linux_Graphics_CN.pdf

└── Rockchip_Developer_Guide_Linux_Graphics_EN.pdf

6.9 應(yīng)用開發(fā)

SDK常用應(yīng)用有Weston、QT、ROS等應(yīng)用開發(fā),參考/docs/Linux/Graphics/ApplicationNote目錄下文檔

6.10 安全機(jī)制開發(fā)

參考/docs/Linux/Security目錄下文檔

7. SDK 測(cè)試

7.1 Benchmark 測(cè)試

?些常?基準(zhǔn)測(cè)試的參考數(shù)據(jù),該測(cè)試文檔位于:

<SDK>/docs/Linux/Profile/Rockchip_Introduction_Linux_Benchmark_KPI_EN.pdf

7.2 Rockchip 模塊和壓力測(cè)試

提供一些常用模塊功能和壓力測(cè)試的方法,該文檔位于:

<SDK>/docs/Linux/Profile/Rockchip_User_Guide_Linux_Software_Test_CN.pdf

8. 常見問題(FAQ)

8.1 如何確認(rèn)當(dāng)前kernel和u-boot版本?

Linux 4.19對(duì)應(yīng)的kernel版本為:develop-4.19,u-boot為next-dev分支

8.2 Debian相關(guān)問題

8.2.1 遇到" noexec or nodev"問題

noexec or nodev issue /usr/share/debootstrap/functions: line 1450:

..../rootfs/ubuntu-build-service/buster-desktop-arm64/chroot/test-dev-null:

Permission denied E: Cannot install into target '/rootfs/ubuntu-buildservice/buster-desktop-arm64/chroot' mounted with noexec or nodev

解決方法:

mount -o remount,exec,dev xxx

(其中xxx 是工程目錄路徑,然后重新編譯)

另外如果還有遇到其他編譯異常,先排除使用的編譯系統(tǒng)是 ext2/ext4 的系統(tǒng)類型。

8.2.2 下載"Base Debian"失敗問題

由于編譯 Base Debian 需要訪問國外網(wǎng)站,而國內(nèi)網(wǎng)絡(luò)訪問國外網(wǎng)站時(shí),經(jīng)常出現(xiàn)下載失敗的情況:

Debian 使用 live build,鏡像源改為國內(nèi)可以這樣配置:

32位系統(tǒng):

+++ b/ubuntu-build-service/{buster/bullseye}-desktop-armhf/configure

@@ -11,6 +11,11 @@ set -e

echo "I: create configuration"

export LB_BOOTSTRAP_INCLUDE="apt-transport-https gnupg"

lb config \

+ --mirror-bootstrap "http://mirrors.ustc.edu.cn/debian" \

+ --mirror-chroot "http://mirrors.ustc.edu.cn/debian" \

+ --mirror-chroot-security "http://mirrors.ustc.edu.cn/debian-security" \

+ --mirror-binary "http://mirrors.ustc.edu.cn/debian" \

+ --mirror-binary-security "http://mirrors.ustc.edu.cn/debian-security" \

--apt-indices false \

--apt-recommends false \

--apt-secure false \

64位系統(tǒng):

--- a/ubuntu-build-service/{buster/bullseye}-desktop-arm64/configure

+++ b/ubuntu-build-service/{buster/bullseye}-desktop-arm64/configure

@@ -11,6 +11,11 @@ set -e

echo "I: create configuration"

export LB_BOOTSTRAP_INCLUDE="apt-transport-https gnupg"

lb config \

+ --mirror-bootstrap "http://mirrors.ustc.edu.cn/debian" \

+ --mirror-chroot "http://mirrors.ustc.edu.cn/debian" \

+ --mirror-chroot-security "http://mirrors.ustc.edu.cn/debian-security" \

+ --mirror-binary "http://mirrors.ustc.edu.cn/debian" \

+ --mirror-binary-security "http://mirrors.ustc.edu.cn/debian-security" \

--apt-indices false \

--apt-recommends false \

--apt-secure false \

如果其他網(wǎng)絡(luò)原因不能下載包,有預(yù)編生成的包分享在百度云網(wǎng)盤,放在當(dāng)前目錄直接執(zhí)行下一步操作。

8.2.3 異常操作導(dǎo)致掛載/dev出錯(cuò)問題

比如出現(xiàn)這種 askpass command or cannot use one

引起原因可能是編譯過程頻繁異常操作(CTRL+C),導(dǎo)致上面出錯(cuò)的,可以通過如下方式修復(fù):

sudo -S umount /dev

8.2.4 怎么查看系統(tǒng)相關(guān)信息

如何查看系統(tǒng)Debian版本?

root@linaro-alip:~# cat /etc/debian_version

11.1

如何查看Debian顯示用X11還是Wayland?

在X11系統(tǒng)上:

$ echo $XDG_SESSION_TYPE

x11

在Wayland系統(tǒng)上:

$ echo $XDG_SESSION_TYPE

wayland

如何查看系統(tǒng)分區(qū)情況

root@linaro-alip:~# parted -l

Model: MMC BJTD4R (sd/mmc)

Disk /dev/mmcblk0: 31.3GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

NumberStartEndSizeFilesystemNameFlags

1 8389kB 12.6MB 4194kB uboot

2 12.6MB 16.8MB 4194kB misc

3 16.8MB 83.9MB 67.1MB boot

4 83.9MB 218MB 134MB recovery

5 218MB 252MB 33.6MB backup

6 252MB 15.3GB 15.0GB ext4 rootfs

7 15.3GB 15.4GB 134MB ext2 oem

8 15.6GB 31.3GB 15.6GB ext2 userdata

8.2.5 系統(tǒng)出現(xiàn)ssh.service服務(wù)異常

這是Debian10或早期存在的問題 /etc/rc.local 添加如下:

#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will "exit 0" on success or any other

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.

# Generate the SSH keys if non-existent

if [ ! -f /etc/ssh/ssh_host_rsa_key ]

then

# else ssh service start in dpkg-reconfigure will fail

systemctl stop ssh.socket||true

dpkg-rec

8.2.6 Debian11 base包編譯不過

會(huì)遇到類似如下報(bào)錯(cuò)

W: Failure trying to run: /sbin/ldconfig

W: See //debootstrap/debootstrap.log for details

主要要求PC的kernel版本是5.10+, 這是舊的QEMU存在的bug. 解決方法主要兩種:

PC自帶的內(nèi)核版本需滿足5.10+的需求。

檢查PC內(nèi)核版本

cat /proc/version

Linux version 5.13.0-39-generic

更新系統(tǒng)的qemu

參考 HYPERLINK "https://launchpad.net/~canonical-server/+archive/ubuntu/server-backports" 。

8.3 Linux視頻相關(guān)問題

8.3.1 播放視頻卡頓,日志出現(xiàn)丟幀錯(cuò)誤,要怎么解決

可以使用 fpsdisplaysink 確認(rèn)最高幀率,如果最高幀率接近期望幀率,可以通過指定sync=false 解決,部分平臺(tái)可以開啟 AFBC??D也可以看下硬件運(yùn)?時(shí)間,echo0x100 >/sys/module/rk_vcodec/parameters/mpp_dev_debug

8.3.2 gst-launch-1.0 進(jìn)?攝像頭視頻預(yù)覽命令

可以使用 v4l2src 插件,如 gst-launch-1.0 v4l2src ! autovideosink

8.3.3 開啟 AFBC 后播放畫?出現(xiàn)抖動(dòng),要怎么解決

畫面抖動(dòng)一般是 ddr 帶寬不足,可以嘗試固定性能模式。另外由于顯示硬件實(shí)現(xiàn)方式,垂直方向上如果有縮放,需要的性能和帶寬會(huì)比較高,容易不足,需要使?其他方式縮放(如rga/gpu)

8.3.4 Gstreamer 框架 buffer 是零拷貝嗎

使用dmabuf 相關(guān)接口進(jìn)行數(shù)據(jù)處理實(shí)現(xiàn)零拷貝

8.3.5 gst-launch-1.0 怎么測(cè)試解碼最高的性能?

設(shè)置性能模式,用官方的 fpsdisplaysink 查看幀率,以及驅(qū)動(dòng)的調(diào)試接口查看驅(qū)動(dòng)幀率

8.3.6 播放時(shí)如果畫面出現(xiàn)抖動(dòng),水波紋,要怎么解決

抖動(dòng)一般都是顯示硬件的性能不足,?部分是 ddr 帶寬不夠,可以用 ddr 性能模式,固定最高頻

8.3.7 Gstreamer怎么快速接入 opengles?

一般是合成上有 gl 插件支持,送顯上由第三?顯示服務(wù)支持,顯示服務(wù)內(nèi)部可以進(jìn)行opengles 合成(如 weston)

8.4顯示相關(guān)問題

8.4.1 如何使視頻送顯到視頻層

drm 有接口,可以查詢到 plane 的 type。具體可以參考 gstreamer 的 kmssink 方式。

8.4.2 wayland 多屏異顯模式如何配置每個(gè)屏幕的位置,比如左右或者上下位置的

weston 異顯只支持左右排列,按照屏幕加載順序,具體可以參考

/docs/Linux/*/Rockchip_Developer_Guide_Buildroot_Weston_CN.pdf 2.9 多屏配置

8.4.3 Debian xserver 版本是多少

Debian10使用 xserver1.20.4,Debian11使用 xserver1.20.11

20221021_63520b2858730__Linux開發(fā)

聲明:該篇文章為本站原創(chuàng),未經(jīng)授權(quán)不予轉(zhuǎn)載,侵權(quán)必究。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉