!12 rockchip: 分离firmware操作到版型文件

From: @chainsx 
Reviewed-by: @jianminw 
Signed-off-by: @jianminw
This commit is contained in:
openeuler-ci-bot 2025-01-10 02:40:33 +00:00 committed by Gitee
commit d7a3df9e66
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
13 changed files with 147 additions and 90 deletions

View File

@ -66,13 +66,31 @@
运行 rootfs 构建脚本需执行命令:
`sudo bash build_rootfs.sh -r REPO_INFO -b KERNEL_BRANCH -d DTB_NAME -s SPEC`
`sudo bash build_rootfs.sh --board BOARD -r REPO_INFO -b KERNEL_BRANCH -s SPEC`
**说明: 基于 build_rootfs.sh 提供的默认参数,执行 sudo ./build_rootfs.sh 可生成 Firefly-RK3399 的 rootfs 分区镜像 rootfs.img。**
各个参数意义:
1. -r, --repo REPO_INFO
1. --board BOARD
适用的开发板的版型配置文件在 [boards](../../scripts/rockchip/boards) 文件夹中,示例文件 [sample.conf](../../scripts/rockchip/boards/sample.conf),默认为 `firefly-rk3399`
其包括的配置参数意义如下:
- platform=PLATFORM
开发板所使用的平台目前支持的平台有rockchip、phytium默认为 `rockchip`
- device-tree=DTB_NAME
内核设备树中的设备名称,和开发板名称有一点区别,对应 [kernel/arch/arm64/boot/dts/rockchip](https://gitee.com/openeuler/kernel/tree/master/arch/arm64/boot/dts/rockchip) 下的 `DTB_NAME.dts` 文件,默认为 `rk3399-firefly`
- ubootconfig=UBOOT_DEFCONFIG
开发板对应的 defconfig 的文件名称,对应 [u-boot/configs](https://github.com/u-boot/u-boot/tree/master/configs) 下 `UBOOT_DEFCONFIG` 文件,默认为 `firefly-rk3399_defconfig`;如需在 RK3588 开发板上使用预编译的 u-boot可以将此项设置为 `none`
2. -r, --repo REPO_INFO
开发源 repo 文件的 URL 或者路径,也可以是开发源中资源库的 baseurl 列表。注意,如果该参数为资源库的 baseurl 列表,该参数需要使用双引号,各个 baseurl 之间以空格隔开。
下面分别举例:
@ -84,7 +102,7 @@
- 资源库的 baseurl 列表,如 `http://repo.openeuler.org/openEuler-20.03-LTS-SP2/OS/aarch64/ http://repo.openeuler.org/openEuler-20.03-LTS-SP2/EPOL/aarch64/`
2. -b, --branch KERNEL_BRANCH
3. -b, --branch KERNEL_BRANCH
内核源码的对应分支,默认为 openEuler-20.03-LTS。根据 -k 参数有以下选择:
@ -94,10 +112,6 @@
- openEuler-21.03
- openEuler-21.09
3. -d, --device-tree DTB_NAME
内核设备树名称,和开发板名称有一点区别,对应 [kernel/arch/arm64/boot/dts/rockchip](https://gitee.com/openeuler/kernel/tree/master/arch/arm64/boot/dts/rockchip) 下的 `DTB_NAME.dts` 文件,默认为 `rk3399_firefly`
4. -s, --spec SPEC
构建的镜像版本:

View File

@ -1,3 +1,10 @@
ubootconfig=none
dtb_name=rk3588-firefly-itx-3588j
platform=rockchip
platform=rockchip
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
mkdir -p ${rootfs_dir}/etc/modules-load.d/
echo "8821cu" >> ${rootfs_dir}/etc/modules-load.d/8821cu.conf
}

View File

@ -1,3 +1,23 @@
ubootconfig=firefly-rk3399_defconfig
dtb_name=rk3399-firefly
platform=rockchip
platform=rockchip
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
if [ "x$branch" == "xopenEuler-20.03-LTS" ]; then
mkdir -p ${rootfs_dir}/system
mkdir -p ${rootfs_dir}/etc/profile.d/
mkdir -p ${rootfs_dir}/usr/bin/
cp -r ${nonfree_bin_dir}/wireless/system/* ${rootfs_dir}/system/
cp ${nonfree_bin_dir}/wireless/rcS.sh ${rootfs_dir}/etc/profile.d/
cp ${nonfree_bin_dir}/wireless/enable_bt ${rootfs_dir}/usr/bin/
chmod +x ${rootfs_dir}/usr/bin/enable_bt ${rootfs_dir}/etc/profile.d/rcS.sh
ln -s ${rootfs_dir}/system/etc/firmware ${rootfs_dir}/etc/firmware
else
mkdir -p ${rootfs_dir}/usr/lib/firmware/brcm
cp ${nonfree_bin_dir}/linux-firmware/ap6356s/brcmfmac4356-sdio.bin ${rootfs_dir}/usr/lib/firmware/brcm
cp ${nonfree_bin_dir}/linux-firmware/ap6356s/brcmfmac4356-sdio.firefly,firefly-rk3399.txt ${rootfs_dir}/usr/lib/firmware/brcm
cp ${nonfree_bin_dir}/linux-firmware/ap6356s/BCM4356A2.hcd ${rootfs_dir}/usr/lib/firmware/brcm
fi
}

View File

@ -1,3 +1,12 @@
ubootconfig=none
dtb_name=rk3566-roc-pc
platform=rockchip
platform=rockchip
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
mkdir -p ${rootfs_dir}/usr/lib/firmware/brcm
cp ${nonfree_bin_dir}/linux-firmware/ap6255/brcmfmac43455-sdio.bin ${rootfs_dir}/usr/lib/firmware/brcm/brcmfmac43455-sdio.firefly,rk3566-roc-pc.bin
cp ${nonfree_bin_dir}/linux-firmware/ap6255/brcmfmac43455-sdio.txt ${rootfs_dir}/usr/lib/firmware/brcm/brcmfmac43455-sdio.firefly,rk3566-roc-pc.txt
cp ${nonfree_bin_dir}/linux-firmware/ap6255/BCM4345C0.hcd ${rootfs_dir}/usr/lib/firmware/brcm
}

View File

@ -1,3 +1,12 @@
ubootconfig=none
dtb_name=rk3568-roc-pc-se
platform=rockchip
platform=rockchip
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
mkdir -p ${rootfs_dir}/usr/lib/firmware/brcm
cp ${nonfree_bin_dir}/linux-firmware/ap6275s/brcmfmac43752-sdio.bin ${rootfs_dir}/usr/lib/firmware/brcm/brcmfmac43752-sdio.firefly,rk3568-roc-pc-se.bin
cp ${nonfree_bin_dir}/linux-firmware/ap6275s/brcmfmac43752-sdio.txt ${rootfs_dir}/usr/lib/firmware/brcm/brcmfmac43752-sdio.firefly,rk3568-roc-pc-se.txt
cp ${nonfree_bin_dir}/linux-firmware/ap6275s/BCM4362A2.hcd ${rootfs_dir}/usr/lib/firmware/brcm
}

View File

@ -1,3 +1,8 @@
ubootconfig=none
dtb_name=rk3588s-roc-pc
platform=rockchip
platform=rockchip
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
echo "Nothing to do..."
}

View File

@ -1,3 +1,14 @@
ubootconfig=none
dtb_name=phytiumpi_firefly
platform=rockchip
platform=rockchip
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
mkdir -p ${rootfs_dir}/lib/firmware/rtlbt/
cp ${nonfree_bin_dir}/linux-firmware/rtl8821c/systemd-hciattach.service ${rootfs_dir}/etc/systemd/system/systemd-hciattach.service
cp ${nonfree_bin_dir}/linux-firmware/rtl8821c/rtk_hciattach ${rootfs_dir}/usr/bin/rtk_hciattach
cp ${nonfree_bin_dir}/linux-firmware/rtl8821c/rtl8821c_config ${rootfs_dir}/lib/firmware/rtlbt/rtl8821c_config
cp ${nonfree_bin_dir}/linux-firmware/rtl8821c/rtl8821c_fw ${rootfs_dir}/lib/firmware/rtlbt/rtl8821c_fw
chmod +x ${rootfs_dir}/usr/bin/rtk_hciattach
}

View File

@ -1,3 +1,8 @@
ubootconfig=none
dtb_name=rk3588-rock-5b
platform=rockchip
platform=rockchip
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
echo "Nothing to do..."
}

View File

@ -1,3 +1,8 @@
ubootconfig=rock-pi-4-rk3399_defconfig
dtb_name=rk3399-rock-pi-4a
platform=rockchip
platform=rockchip
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
echo "Nothing to do..."
}

View File

@ -1,3 +1,8 @@
ubootconfig=firefly-rk3399_defconfig #Required! The name of defconfig file when compiling u-boot, which defaults to firefly-rk3399_defconfig.
dtb_name=rk3399-firefly #Required! The device tree name of target board, which defaults to rk3399-firefly.
platform=rockchip #Required! The platform of target board, which defaults to rockchip.
platform=rockchip #Required! The platform of target board, which defaults to rockchip.
POST_BOARD_OVERLAY() {
echo "Put ${board} firmware into rootfs..."
echo "This is a sample..."
}

View File

@ -56,7 +56,8 @@ save_param() {
if [ -f $workdir/.param ]; then
mv $workdir/.param $workdir/.param_last
fi
echo "default_defconfig=$default_defconfig
echo "board=$board
default_defconfig=$default_defconfig
ubootconfig=$ubootconfig
dtb_name=$dtb_name
platform=$platform
@ -142,6 +143,7 @@ cur_dir=$(cd $(dirname $0);pwd)
source ${cur_dir}/boards/${board}.conf
LOG "Board config: ${board}."
LOG "U-Boot config: ${ubootconfig}."
LOG "DeviceTree name: ${dtb_name}."
LOG "Target platform: ${platform}."

View File

@ -39,7 +39,7 @@ local_param(){
branch=${branch:7}
default_defconfig=$(cat $workdir/.param | grep default_defconfig)
default_defconfig=${branch:18}
default_defconfig=${default_defconfig:18}
dtb_name=$(cat $workdir/.param | grep dtb_name)
dtb_name=${dtb_name:9}
@ -248,8 +248,7 @@ mk_boot() {
rm -rf ${boot_dir}
}
kernel_defconfig="openeuler_rockchip_defconfig"
default_defconfig=""
kernel_defconfig=""
default_param
local_param
@ -259,14 +258,13 @@ set -e
rockchip_bootargs="earlyprintk console=ttyS2,1500000 rw root=UUID=614e0000-0000-4b53-8000-1d28000054a9 rootfstype=ext4 init=/sbin/init rootwait"
phytium_bootargs="console=ttyAMA1,115200 earlycon=pl011,0x2800d000 rw root=UUID=614e0000-0000-4b53-8000-1d28000054a9 rootfstype=ext4 rootwait cma=256m"
if [ "x$default_defconfig" == "x" ] ; then
default_defconfig=$kernel_defconfig
if [ ! -f $default_defconfig ] ; then
LOG "kernel defconfig is : ${default_defconfig}"
kernel_defconfig=$default_defconfig
elif [ -f $default_defconfig ]; then
LOG "use local kernel defconfig..."
cp $default_defconfig ${workdir}/
kernel_defconfig=${workdir}/${default_defconfig##*/}
else
echo `date` - ERROR, config file $default_defconfig can not be found.
exit 2
fi
if [ ! -d $workdir ]; then

View File

@ -2,14 +2,14 @@
__usage="
Usage: build_rootfs [OPTIONS]
Build Rockchip openEuler-root image.
Build openEuler rootfs image.
Run in root user.
The target rootfs.img will be generated in the build folder of the directory where the build_rootfs.sh script is located.
Options:
--board, BOARD Required! The config of target board in the boards folder, which defaults to firefly-rk3399.
-r, --repo REPO_INFO The URL/path of target repo file or list of repo's baseurls which should be a space separated list.
-b, --branch KERNEL_BRANCH The branch name of kernel source's repository, which defaults to openEuler-20.03-LTS.
-d, --device-tree DTB_NAME The device tree name of target board, which defaults to rk3399-firefly.
-s, --spec SPEC The image's specification: headless, xfce, ukui, dde or the file path of rpmlist. The default is headless.
-h, --help Show command help.
"
@ -21,10 +21,10 @@ help()
}
default_param() {
board=firefly-rk3399
repo_file="https://gitee.com/src-openeuler/openEuler-repos/raw/openEuler-20.03-LTS/generic.repo"
tmp_dir=${workdir}/tmp
workdir=$(pwd)/build
dtb_name=rk3399-firefly
branch=openEuler-20.03-LTS
nonfree_bin_dir=${workdir}/../bin
rootfs_dir=${workdir}/rootfs
@ -33,15 +33,15 @@ default_param() {
local_param(){
if [ -f $workdir/.param ]; then
board=$(cat $workdir/.param | grep board)
board=${board:6}
repo_file=$(cat $workdir/.param | grep repo_file)
repo_file=${repo_file:10}
branch=$(cat $workdir/.param | grep branch)
branch=${branch:7}
dtb_name=$(cat $workdir/.param | grep dtb_name)
dtb_name=${dtb_name:9}
spec_param=$(cat $workdir/.param | grep spec_param)
spec_param=${spec_param:11}
fi
@ -59,6 +59,10 @@ parseargs()
return 1
elif [ "x$1" == "x" ]; then
shift
elif [ "x$1" == "x--board" ]; then
board=`echo $2`
shift
shift
elif [ "x$1" == "x-r" -o "x$1" == "x--repo" ]; then
repo_file=`echo $2`
shift
@ -67,10 +71,6 @@ parseargs()
branch=`echo $2`
shift
shift
elif [ "x$1" == "x-d" -o "x$1" == "x--device-tree" ]; then
dtb_name=`echo $2`
shift
shift
elif [ "x$1" == "x-s" -o "x$1" == "x--spec" ]; then
spec_param=`echo $2`
shift
@ -289,49 +289,8 @@ EOF
echo "LABEL=boot /boot vfat defaults,noatime 0 0" >> ${rootfs_dir}/etc/fstab
LOG "Set fstab done."
if [ -f $workdir/.param ]; then
dtb_name=$(cat $workdir/.param | grep dtb_name)
dtb_name=${dtb_name:9}
if [ "x$dtb_name" == "xrk3399-firefly" ]; then
cd $workdir
if [ "x$branch" == "xopenEuler-20.03-LTS" ]; then
mkdir -p ${rootfs_dir}/system
mkdir -p ${rootfs_dir}/etc/profile.d/
mkdir -p ${rootfs_dir}/usr/bin/
cp -r $nonfree_bin_dir/wireless/system/* ${rootfs_dir}/system/
cp $nonfree_bin_dir/wireless/rcS.sh ${rootfs_dir}/etc/profile.d/
cp $nonfree_bin_dir/wireless/enable_bt ${rootfs_dir}/usr/bin/
chmod +x ${rootfs_dir}/usr/bin/enable_bt ${rootfs_dir}/etc/profile.d/rcS.sh
LOG "install firefly-rk3399 wireless firmware done."
ln -s ${rootfs_dir}/system/etc/firmware ${rootfs_dir}/etc/firmware
fi
mkdir -p ${rootfs_dir}/usr/lib/firmware/brcm
cp $nonfree_bin_dir/linux-firmware/ap6356s/brcmfmac4356-sdio.bin ${rootfs_dir}/usr/lib/firmware/brcm
cp $nonfree_bin_dir/linux-firmware/ap6356s/brcmfmac4356-sdio.firefly,firefly-rk3399.txt ${rootfs_dir}/usr/lib/firmware/brcm
cp $nonfree_bin_dir/linux-firmware/ap6356s/BCM4356A2.hcd ${rootfs_dir}/usr/lib/firmware/brcm
elif [ "x$dtb_name" == "xrk3588-firefly-itx-3588j" ]; then
cd $workdir
mkdir -p ${rootfs_dir}/etc/modules-load.d/
echo "8821cu" >> ${rootfs_dir}/etc/modules-load.d/8821cu.conf
elif [ "x$dtb_name" == "xrk3566-roc-pc" ];then
mkdir -p ${rootfs_dir}/usr/lib/firmware/brcm
cp $nonfree_bin_dir/linux-firmware/ap6255/brcmfmac43455-sdio.bin ${rootfs_dir}/usr/lib/firmware/brcm/brcmfmac43455-sdio.firefly,rk3566-roc-pc.bin
cp $nonfree_bin_dir/linux-firmware/ap6255/brcmfmac43455-sdio.txt ${rootfs_dir}/usr/lib/firmware/brcm/brcmfmac43455-sdio.firefly,rk3566-roc-pc.txt
cp $nonfree_bin_dir/linux-firmware/ap6255/BCM4345C0.hcd ${rootfs_dir}/usr/lib/firmware/brcm
elif [ "x$dtb_name" == "xrk3568-roc-pc-se" ];then
mkdir -p ${rootfs_dir}/usr/lib/firmware/brcm
cp $nonfree_bin_dir/linux-firmware/ap6275s/brcmfmac43752-sdio.bin ${rootfs_dir}/usr/lib/firmware/brcm/brcmfmac43752-sdio.firefly,rk3568-roc-pc-se.bin
cp $nonfree_bin_dir/linux-firmware/ap6275s/brcmfmac43752-sdio.txt ${rootfs_dir}/usr/lib/firmware/brcm/brcmfmac43752-sdio.firefly,rk3568-roc-pc-se.txt
cp $nonfree_bin_dir/linux-firmware/ap6275s/BCM4362A2.hcd ${rootfs_dir}/usr/lib/firmware/brcm
elif [[ "x$dtb_name" == "xphytiumpi_firefly" ]]; then
mkdir -p ${rootfs_dir}/lib/firmware/rtlbt/
cp $nonfree_bin_dir/linux-firmware/rtl8821c/systemd-hciattach.service ${rootfs_dir}/etc/systemd/system/systemd-hciattach.service
cp $nonfree_bin_dir/linux-firmware/rtl8821c/rtk_hciattach ${rootfs_dir}/usr/bin/rtk_hciattach
cp $nonfree_bin_dir/linux-firmware/rtl8821c/rtl8821c_config ${rootfs_dir}/lib/firmware/rtlbt/rtl8821c_config
cp $nonfree_bin_dir/linux-firmware/rtl8821c/rtl8821c_fw ${rootfs_dir}/lib/firmware/rtlbt/rtl8821c_fw
chmod +x ${rootfs_dir}/usr/bin/rtk_hciattach
fi
fi
POST_BOARD_OVERLAY
UMOUNT_ALL
}
@ -372,6 +331,12 @@ parseargs "$@" || help $?
CONFIG_RPM_LIST=$workdir/../configs/rpmlist
POST_BOARD_OVERLAY() {
echo "Initial POST_BOARD_OVERLAY function" # It will be overwritten by board.conf.
}
source $workdir/../boards/${board}.conf
if [ ! -d $workdir ]; then
mkdir $workdir
fi
@ -384,22 +349,24 @@ sed -i 's/rootfs//g' $workdir/.done
LOG "build rootfs..."
if [ -d rootfs ]; then
if [[ -f $workdir/rootfs.img && $(cat $workdir/.done | grep rootfs) == "rootfs" ]];then
last_branch=$(cat $workdir/.param_last | grep branch)
last_branch=${last_branch:7}
if [ -f $workdir/.param_last ];then
last_branch=$(cat $workdir/.param_last | grep branch)
last_branch=${last_branch:7}
last_dtb_name=$(cat $workdir/.param_last | grep dtb_name)
last_dtb_name=${last_dtb_name:9}
last_board=$(cat $workdir/.param_last | grep board)
last_board=${last_board:6}
last_repo_file=$(cat $workdir/.param_last | grep repo_file)
last_repo_file=${last_repo_file:10}
last_repo_file=$(cat $workdir/.param_last | grep repo_file)
last_repo_file=${last_repo_file:10}
last_spec_param=$(cat $workdir/.param_last | grep spec_param)
last_spec_param=${last_spec_param:11}
last_spec_param=$(cat $workdir/.param_last | grep spec_param)
last_spec_param=${last_spec_param:11}
if [[ ${last_branch} != ${branch} || ${last_dtb_name} != ${dtb_name} || ${last_repo_file} != ${repo_file} || ${last_spec_param} != ${spec_param} ]]; then
rm -rf rootfs
build_rootfs
mk_rootfsimg
if [[ ${last_branch} != ${branch} || ${last_board} != ${board} || ${last_repo_file} != ${repo_file} || ${last_spec_param} != ${spec_param} ]]; then
rm -rf rootfs
build_rootfs
mk_rootfsimg
fi
fi
else
rm -rf rootfs