Difference between revisions of "APITestPage"

From FriendlyELEC WiKi
Jump to: navigation, search
(Linux系统编译)
(updated by API)
 
(95 intermediate revisions by the same user not shown)
Line 1: Line 1:
===Linux系统编译===
 
====各个OS对应的内核与u-boot版本====
 
{| class="wikitable"
 
|-
 
! 操作系统
 
! 内核版本
 
! uboot版本
 
! 交叉编译器
 
! 分区类型
 
! 构建工具集
 
! 内核代码分支
 
! 内核配置
 
! uboot代码分支
 
! uboot配置
 
|-
 
| buildroot
 
| rowspan="2" | linux v4.19.y
 
| rowspan="7" | u-boot <br />v2017.09
 
| rowspan="7" | 11.3-aarch64
 
| rowspan="2" | [https://github.com/friendlyarm/sd-fuse_rk3328/blob/kernel-4.19/prebuilt/parameter.template GPT]
 
| rowspan="2" | [https://github.com/friendlyarm/sd-fuse_rk3328/tree/kernel-4.19 sd-fuse]
 
| rowspan="2" | [https://github.com/friendlyarm/kernel-rockchip/tree/nanopi4-v4.19.y nanopi4-v4.19.y]
 
| rowspan="2" | nanopi4_linux_defconfig
 
| rowspan="7" | [https://github.com/friendlyarm/uboot-rockchip/tree/nanopi4-v2017.09 nanopi4-v2017.09]
 
| rowspan="7" | rk3288_defconfig
 
|-
 
| friendlycore-focal-arm64
 
|-
 
| friendlycore-lite-focal-arm64
 
| rowspan="5" | linux v5.15.y
 
| rowspan="5" | [https://github.com/friendlyarm/sd-fuse_rk3328/blob/kernel-5.15.y/prebuilt/parameter.template GPT]
 
| rowspan="5" | [https://github.com/friendlyarm/sd-fuse_rk3328/tree/kernel-5.15.y<br /> sd-fuse]
 
| rowspan="5" | [https://github.com/friendlyarm/kernel-rockchip/tree/nanopi-r2-v5.15.y nanopi-r2-v5.15.y]
 
| nanopi-r2_linux_defconfig
 
|-
 
| friendlywrt21
 
| rowspan="4" | nanopi-r2_linux_defconfig<br />+friendlywrt.config
 
|-
 
| friendlywrt21-docker
 
|-
 
| friendlywrt22
 
|-
 
| friendlywrt22-docker
 
|}
 
* 内核源代码仓库地址:https://github.com/friendlyarm/kernel-rockchip
 
* u-boot源代码仓库地址:https://github.com/friendlyarm/uboot-rockchip
 
* 交叉编译工具链存放在如下路径: /opt/FriendlyARM/toolchain/,使用前需导出到PATH环境变量,例如需要使用11.3-aarch64版本的编译器,使用如下命令:
 
<syntaxhighlight lang="bash">
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
</syntaxhighlight>
 
* sd-fuse构建工具集可以用于快速编译kernel和uboot、重新打包sd卡固件与卡刷固件等
 
* 点击表格中的MBR与GPT可查看各系统的分区布局(配置文件)
 
====编译内核linux-v4.19.y====
 
本节内容适用于如下OS:
 
{| class="wikitable"
 
|-
 
| buildroot
 
| friendlycore-focal-arm64
 
|}
 
下载源代码并编译:
 
<syntaxhighlight lang="bash">
 
git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi4-v4.19.y kernel-rockchip
 
cd kernel-rockchip
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
touch .scmversion
 
# 编译内核
 
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4_linux_defconfig
 
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux- menuconfig  # 启动配置界面
 
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- nanopi4-images -j$(nproc)
 
# 编译驱动模块
 
mkdir -p out-modules
 
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
 
make ARCH=arm64 CROSS_COMPILE=aarch64-linux- INSTALL_MOD_PATH="$PWD/out-modules" modules_install
 
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
 
rm -rf $PWD/out-modules/lib/modules/${KERNEL_VER}/kernel/drivers/gpu/arm/mali400/
 
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
 
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)
 
</syntaxhighlight>
 
编译完会生成如下文件:
 
{| class="wikitable"
 
|-
 
| kernel.img
 
| resource.img
 
| 驱动模块位于out-modules目录
 
|}
 
安装内核: <br>
 
请参考 [[#下载uboot与内核到目标板]]<br>
 
====编译内核linux-v5.15.y====
 
本节内容适用于如下OS:
 
{| class="wikitable"
 
|-
 
| friendlywrt21
 
| friendlywrt21-docker
 
| friendlywrt22
 
| friendlywrt22-docker
 
| friendlycore-lite-focal-arm64
 
|}
 
下载源代码并编译:
 
<syntaxhighlight lang="bash">
 
git clone https://github.com/friendlyarm/kernel-rockchip --single-branch --depth 1 -b nanopi-r2-v5.15.y kernel-rockchip
 
cd kernel-rockchip
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
touch .scmversion
 
# 编译内核
 
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi-r2_linux_defconfig
 
# make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig  # 启动配置界面
 
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 -j$(nproc)
 
# 编译驱动模块
 
mkdir -p out-modules && rm -rf out-modules/*
 
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH="$PWD/out-modules" modules -j$(nproc)
 
make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 INSTALL_MOD_PATH="$PWD/out-modules" modules_install
 
KERNEL_VER=$(make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 kernelrelease)
 
[ ! -f "$PWD/out-modules/lib/modules/${KERNEL_VER}/modules.dep" ] && depmod -b $PWD/out-modules -E Module.symvers -F System.map -w ${KERNEL_VER}
 
(cd $PWD/out-modules && find . -name \*.ko | xargs aarch64-linux-strip --strip-unneeded)
 
</syntaxhighlight>
 
打包kernel.img与resource.img:
 
<syntaxhighlight lang="bash">
 
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3328/kernel-5.15.y/tools/mkkrnlimg && chmod 755 mkkrnlimg
 
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3328/kernel-5.15.y/tools/resource_tool && chmod 755 resource_tool
 
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3328/kernel-5.15.y/prebuilt/boot/logo.bmp
 
wget https://raw.githubusercontent.com/friendlyarm/sd-fuse_rk3328/kernel-5.15.y/prebuilt/boot/logo_kernel.bmp
 
./mkkrnlimg arch/arm64/boot/Image kernel.img
 
./resource_tool --dtbname arch/arm64/boot/dts/rockchip/rk3328-nanopi*-rev*.dtb logo.bmp logo_kernel.bmp
 
</syntaxhighlight>
 
完成后会得到如下文件:
 
{| class="wikitable"
 
|-
 
| kernel.img
 
| resource.img
 
| 驱动模块位于out-modules目录
 
|}
 
安装内核: <br>
 
请参考 [[#下载uboot与内核到目标板]]<br>
 
====编译u-boot v2017.09====
 
本节内容适用于如下OS:
 
{| class="wikitable"
 
|-
 
| buildroot
 
| friendlycore-focal-arm64
 
| friendlywrt21
 
| friendlywrt21-docker
 
| friendlywrt22
 
| friendlywrt22-docker
 
| friendlycore-lite-focal-arm64
 
|}
 
下载源代码并编译:
 
<syntaxhighlight lang="bash">
 
git clone https://github.com/friendlyarm/rkbin --single-branch --depth 1 -b friendlyelec
 
git clone https://github.com/friendlyarm/uboot-rockchip --single-branch --depth 1 -b nanopi4-v2017.09 -j$(nproc)
 
export PATH=/opt/FriendlyARM/toolchain/11.3-aarch64/bin/:$PATH
 
cd uboot-rockchip/
 
./make.sh nanopi_r2
 
</syntaxhighlight>
 
编译完成后会生成如下文件:
 
{| class="wikitable"
 
|-
 
| uboot.img
 
| trust.img
 
| rk3328_loader_v1.16.250.bin
 
|}
 
安装u-boot: <br />
 
请参考 [[#下载uboot与内核到目标板]]<br>
 
  
====下载uboot与内核到目标板====
+
{{RockchipUnbrick|NanoPC-T4}}
=====下载至已安装的系统=====
+
======GPT分区======
+
本节内容适用于如下OS:
+
{| class="wikitable"
+
|-
+
| buildroot
+
| friendlycore-focal-arm64
+
| friendlywrt21
+
| friendlywrt21-docker
+
| friendlywrt22
+
| friendlywrt22-docker
+
| friendlycore-lite-focal-arm64
+
|}
+
linux v4.19内核和linux v5.15内核的系统默认使用GPT分区, 更新GPT分区比较简单,直接dd image文件至相应的分区即可(注意image的大小不要越界),在操作时需要注意存储设备的节点:
+
* SD/TF Card设备节点为 /dev/mmcblk0 <br />
+
* eMMC设备节点为 /dev/mmcblk2 <br />
+
下面将演示如何将内核更新到eMMC:<br />
+
使用parted命令查看分区布局:
+
<syntaxhighlight lang="bash">
+
parted /dev/mmcblk2 print
+
</syntaxhighlight>
+
得到如下输出:
+
<syntaxhighlight lang="bash">
+
Model: MMC A3A551 (sd/mmc)
+
Disk /dev/mmcblk2: 31.0GB
+
Sector size (logical/physical): 512B/512B
+
Partition Table: gpt
+
Disk Flags:
+
 
+
Number  Start  End    Size    File system  Name      Flags
+
1      8389kB  12.6MB  4194kB              uboot
+
2      12.6MB  16.8MB  4194kB              misc
+
3      16.8MB  21.0MB  4194kB              dtbo
+
4      21.0MB  37.7MB  16.8MB              resource
+
5      37.7MB  79.7MB  41.9MB              kernel
+
6      79.7MB  113MB  33.6MB              boot
+
7      113MB  147MB  33.6MB              recovery
+
8      147MB  31.0GB  30.9GB  ext4        rootfs
+
</syntaxhighlight>
+
可以看到resource分区位置为4, kernel分区位置为5,用dd命令分别写入resource.img与kernel.img到这两个分区即可, 命令如下:
+
<syntaxhighlight lang="bash">
+
dd if=resource.img of=/dev/mmcblk2p4 bs=1M
+
dd if=kernel.img of=/dev/mmcblk2p5 bs=1M
+
</syntaxhighlight>
+
如果要更新uboot,则命令为:
+
<syntaxhighlight lang="bash">
+
dd if=boot.img of=/dev/mmcblk2p1 bs=1M
+
</syntaxhighlight>
+
如果要更新内核驱动模块,将新驱动模块目录上传并替换以下目录下的文件即可:/lib/modules。
+
 
+
=====打包新的SD卡启动固件或者SD-to-eMMC卡刷固件=====
+
sd-fuse 提供一些工具和脚本, 用于制作SD卡固件, 具体用途如下:<br />
+
* 制作分区镜像文件, 例如将rootfs目录打包成rootfs.img<br />
+
* 将多个分区镜像文件打包成可直接写SD卡的单一镜像文件<br />
+
* 简化内核和uboot的编译, 一键编译内核、第三方驱动, 并更新rootfs.img中的内核模块<br />
+
请根据所用的内核版本点击对应的链接了解详细的使用方法:
+
{| class="wikitable"
+
|-
+
! 内核版本
+
! 构建工具集
+
|-
+
| linux v4.19.y
+
| [https://github.com/friendlyarm/sd-fuse_rk3328/tree/kernel-4.19<br /> sd-fuse]
+
|-
+
| linux v5.15.y
+
| [https://github.com/friendlyarm/sd-fuse_rk3328/tree/kernel-5.15.y<br /> sd-fuse]
+
|}
+
=====线刷=====
+
不擦除flash的情况下只刷入编译生成的文件即可,需要注意的是uboot编译生成的rk3328_loader需要改名为MiniLoaderAll.bin,如下命令演示刷入uboot与内核,需要先加载parameter.txt,再刷入其他文件:
+
<syntaxhighlight lang="bash">
+
sudo upgrade_tool ul MiniLoaderAll.bin
+
sudo upgrade_tool di -p parameter.txt
+
sudo upgrade_tool di uboot uboot.img
+
sudo upgrade_tool di trust trust.img
+
sudo upgrade_tool di resource resource.img
+
sudo upgrade_tool di kernel kernel.img
+
sudo upgrade_tool RD
+
</syntaxhighlight>
+
注:upgrade_tool是Rockchip提供的Linux下的命令行工具(Linux_Upgrade_Tool)
+

Latest revision as of 09:23, 4 June 2024

1 Unbricking Method

If the ROM is not installed correctly, causing the development board to become bricked, and you might not have the opportunity to reinstall the ROM via an SD card, you need to enter Maskrom mode to unbrick it by erasing the storage device.

1.1 Windows Users

1.1.1 Download Required Files

  • Get the necessary tools: Visit here, find RKDevTool_v3.19_for_window.zip and DriverAssitant_v5.12.zip in the 05_Tools directory, and download them to your local machine.
  • Install Rockchip USB driver and RKDevTool: Extract DriverAssitant_v5.12.zip to install the Rockchip USB driver, and extract RKDevTool_v3.19_for_window.zip to obtain the Rockchip flashing tool RKDevTool.
  • Get the loader: Visit here, enter the tools directory corresponding to your CPU model, and download MiniLoaderAll.bin.

1.1.2 Enter Maskrom Mode to Erase the Storage Device

  • Connect NanoPC-T4 to your computer using a USB data cable.
  • Start RKDevTool on your computer.
  • Disconnect the power from NanoPC-T4, hold down the MASK button, connect the power, and release the button when you see Found One MASKROM Device displayed at the bottom of the interface, as shown below:

Rkdevtool found one maskrom device.png

  • Click the Advanced Function tab in the RKDevTool interface.
  • In the Boot text box, select MiniLoaderAll.bin, then click the Download button.
  • Select EMMC, click Switch Storage, then click the EraseAll button to erase the eMMC.

Rkdevtool erase emmc.png

  • At this point, NanoPC-T4 is restored to its initial state and can be normally booted via SD card or eMMC.

1.2 Linux/Mac Users

1.2.1 Download the Required Files

  • Get the necessary tools: Visit here and find upgrade_tool_v2.30_for_linux.tgz (or for Mac users, select upgrade_tool_v2.25_for_mac.tgz) in the 05_Tools directory and download it locally.
  • Get the loader: Visit here, enter the tools directory corresponding to your CPU model, and download MiniLoaderAll.bin.

1.2.2 Installation for upgrade_tool

The following commands are for Linux, with only slight differences in file and directory names for Mac users:

tar xzf upgrade_tool_v2.30_for_linux.tgz
cd upgrade_tool_v2.30_for_linux
sudo cp upgrade_tool /usr/local/sbin/
sudo chmod 755 /usr/local/sbin/upgrade_tool

1.2.3 Enter Maskrom Mode to Erase the Storage Device

  • Connect NanoPC-T4 to the computer using a USB data cable.
  • Disconnect the power from NanoPC-T4, hold down the MASK button, connect the power, and release the button after 4 seconds.
  • Check the connection with the following command:
upgrade_tool LD

A result similar to "DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=13 Mode=Maskrom SerialNo=" indicates that the device has been detected.

  • Erase the eMMC with the following command:
upgrade_tool EF MiniLoaderAll.bin
  • At this point, NanoPC-T4 has been restored to its initial state and can boot the system normally via SD card or eMMC.