玩转fireflyrk3288系列uboot--添加自己的板级包

Posted AlexKing阁下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转fireflyrk3288系列uboot--添加自己的板级包相关的知识,希望对你有一定的参考价值。

#前言
多次写一个完完全全移植一遍uboot的过程,用于熟悉与巩固自己的知识,手头正好有一个fileflyrk3288,那废话不多说开始野生移植。

下一个对的uboot。

开始我下载了uboot2020-04版.
我上传的代码目录

熟悉一下源码结构

tree -L 1

源码目录构成

|-- Documentation 

|-- Kbuild

|-- Kconfig

|-- Licenses

|-- MAINTAINERS

|-- Makefile

|-- README

|-- api

|-- arch

|-- board

|-- cmd

|-- common

|-- config.mk

|-- configs

|-- disk

|-- doc

|-- drivers

|-- dts

|-- env

|-- examples

|-- fs

|-- include

|-- lib

|-- net

|-- post

|-- scripts

|-- snapshot.commit

|-- test

`-- tools

在readme上的目录介绍如下:

Directory Hierarchy:
====================

/arch	Architecture specific files
  /arc	Files generic to ARC architecture
  /arm	Files generic to ARM architecture
  /m68k	Files generic to m68k architecture
  /microblaze	Files generic to microblaze architecture
  /mips	Files generic to MIPS architecture
  /nds32	Files generic to NDS32 architecture
  /nios2	Files generic to Altera NIOS2 architecture
  /openrisc	Files generic to OpenRISC architecture
  /powerpc	Files generic to PowerPC architecture
  /sandbox	Files generic to HW-independent "sandbox"
  /sh	Files generic to SH architecture
  /x86	Files generic to x86 architecture
/api	Machine/arch independent API for external apps
/board	Board dependent files
/cmd	U-Boot commands functions
/common	Misc architecture independent functions
/configs	Board default configuration files
/disk	Code for disk drive partition handling
/doc	Documentation (don't expect too much)
/drivers	Commonly used device drivers
/dts	Contains Makefile for building internal U-Boot fdt.
/examples	Example code for standalone applications, etc.
/fs	Filesystem code (cramfs, ext2, jffs2, etc.)
/include	Header Files
/lib	Library routines generic to all architectures
/Licenses	Various license files
/net	Networking code
/post	Power On Self Test
/scripts	Various build scripts and Makefiles
/test	Various unit test files
/tools	Tools to build S-Record or U-Boot images, etc.

用其他产品编译一下,检查uboot的可编译性与整个makefile的完整性

make rock2_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 4

确保编译能够正常完成。ok,那么就能保证代码是可编译的。
下面就是重头戏戏了,启动移植之旅

选择相关的config

上面已经使用rock2_defonfig做了kconfig的选项,然后使用make menuconfig进去看看具体的config是咋么样的。

大该是这个样子的,然后到里面的ARM architecture,看见了直接是支持rk3328,甚至里面直接支持了firefly-rk3328了。
good。

再看一下根目录下的.config

# CONFIG_ARCH_STI is not set
CONFIG_ARCH_ROCKCHIP=y
# CONFIG_TARGET_THUNDERX_88XX is not set
# CONFIG_ARCH_ASPEED is not set
# CONFIG_SPL_GPIO_SUPPORT is not set
CONFIG_SPL_LIBCOMMON_SUPPORT=y
CONFIG_SPL_LIBGENERIC_SUPPORT=y
CONFIG_SYS_MALLOC_F_LEN=0x2000
# CONFIG_ROCKCHIP_RK3036 is not set
# CONFIG_ROCKCHIP_RK3188 is not set
# CONFIG_ROCKCHIP_RK322X is not set
CONFIG_ROCKCHIP_RK3288=y

可以,里面的config均已经配好,暂且作为开发板的config。
执行以下命令

cp .config ./configs/fireflyrk3328_defconfig
make fireflyrk3328_defconfig

就可以执行了
但是我发现一个更让我省心的事情,那就是在源码中已经支持fileflyrk3328,在configs目录中直接有firefly-rk3288_defconfig,这意味着我直接可以用这个配置进行直接编译。但本着写博客的目的,舍近求远先。

添加自己的config头文件

cd include/configs
cp rock2.h ./fireflyrk3288.h

添加自己的单板配置文件

cd boad/rockchip/
cp evb_rk3288/ ./fireflyrk3288 -af

打开kconfig文件来看自己的选项

if TARGET_EVB_RK3288 #控制宏

config SYS_BOARD #板子支持目录(board/rockchip/evb_rk3288)
 default "evb_rk3288"

config SYS_VENDOR #厂商支持(board/rockchip/),注意你可以在这边改路径的
 default "rockchip"

config SYS_CONFIG_NAME #代表的是板子的控制头文件(include/configs/evb_rk3288.hconfigs/evb_rk3288.h)
 default "evb_rk3288"

config BOARD_SPECIFIC_OPTIONS # dummy
 def_bool y

endif

很明显是只有TARGET_EVB_RK3288才会其效果,那么其他的我先不管,先改成我自己的开发板的模式,具体如下

if TARGET_FIREFLYRK3288

config SYS_BOARD
 default "fireflyrk3288"

config SYS_VENDOR
 default "rockchip"

config SYS_CONFIG_NAME
 default "fireflyrk3288"

config BOARD_SPECIFIC_OPTIONS # dummy
 def_bool y

endif

source "board/rockchip/fireflyrk3288/Kconfig"

find ./ -name “*” |xargs grep -rn “TARGET_EVB_RK3288”
通过以上命令其实可以看到一些相关的Kconfig的逻辑,以下为我所调出来的内容。等下分析。

./board/rockchip/fireflyrk3288/Kconfig:1:if TARGET_EVB_RK3288

./board/rockchip/evb_rk3288/Kconfig:1:if TARGET_EVB_RK3288

./arch/arm/mach-rockchip/rk3288/Kconfig:33:config TARGET_EVB_RK3288

./configs/evb-rk3288_defconfig:6:CONFIG_TARGET_EVB_RK3288=y

./configs/fireflyrk3328_defconfig:167:# CONFIG_TARGET_EVB_RK3288 is not set

./board/rockchip/fireflyrk3288/Kconfig:1:if TARGET_EVB_RK3288

./board/rockchip/evb_rk3288/Kconfig:1:if TARGET_EVB_RK3288

./board/rockchip/fireflyrk3288/Kconfig:1:if TARGET_EVB_RK3288

./board/rockchip/evb_rk3288/Kconfig:1:if TARGET_EVB_RK3288

./board/rockchip/fireflyrk3288/Kconfig:1:if TARGET_EVB_RK3288

./board/rockchip/fireflyrk3288/Kconfig:1:if TARGET_EVB_RK3288

./board/rockchip/evb_rk3288/Kconfig:1:if TARGET_EVB_RK3288

./board/rockchip/evb_rk3288/Kconfig:1:if TARGET_EVB_RK3288

./arch/arm/mach-rockchip/rk3288/Kconfig:33:config TARGET_EVB_RK3288

./arch/arm/mach-rockchip/rk3288/Kconfig:33:config TARGET_EVB_RK3288

./arch/arm/mach-rockchip/rk3288/Kconfig:33:config TARGET_EVB_RK3288

./arch/arm/mach-rockchip/rk3288/Kconfig:33:config TARGET_EVB_RK3288

./arch/arm/mach-rockchip/rk3288/Kconfig:33:config TARGET_EVB_RK3288

./configs/evb-rk3288_defconfig:6:CONFIG_TARGET_EVB_RK3288=y

./configs/fireflyrk3328_defconfig:167:# CONFIG_TARGET_EVB_RK3288 is not set

./configs/evb-rk3288_defconfig:6:CONFIG_TARGET_EVB_RK3288=y

./configs/fireflyrk3328_defconfig:167:# CONFIG_TARGET_EVB_RK3288 is not set

fireflyrk3328_defconfig:167:# CONFIG_TARGET_EVB_RK3288 is not set 这话已经表明了我们是不可能选到TARGET_EVB_RK3288的。

修正kconfig

cd arch/arm/mach-rockchip/rk3288/
修改kconfig,在config TARGET_FIREFLY_RK3288后面添加

config TARGET_FIREFLYRK3288
 bool "FireflyRK3288"
 select BOARD_LATE_INIT
 help
   Firefly is a RK3288based development board with 2 USB ports,
   HDMI, VGA, micro-SD card, audio, WiFi and Gigabit Ethernet, It
   also includes on-board eMMC and 1GB of SDRAM. Expansion connectors
   provide access to display pins, I2C, SPI, UART and GPIOs.

当然你还可以自己建立mach的soc系列,这里需要你了解kconfig的一些用途。这里埋个坑,后续一定会讲到我自己写的轻量级buildroot,一定会细细说道。

修改defconfig

make fireflyrk3328_defconfig
make menuconfig

这里会多一个FireflyRK3288选项,去掉前面选的Firefly-RK3288

保存,看.config可以查到

CONFIG_TARGET_FIREFLYRK3288=y
CONFIG_SYS_SOC="rockchip"
CONFIG_SYS_VENDOR="rockchip"
CONFIG_SYS_BOARD="fireflyrk3288"
CONFIG_SYS_CONFIG_NAME="fireflyrk3288"

make savedefconfig

这样就能保存有价值的选项

cp defconfig ./configs/fireflyrk3328_defconfig

正常编译

make fireflyrk3328_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 4

以上是关于玩转fireflyrk3288系列uboot--添加自己的板级包的主要内容,如果未能解决你的问题,请参考以下文章

[RK3288][Android6.0] 关于uboot中logo相关知识点小结

RK平台images打包细则

免费申请Firefly-RK3288开源板

瑞芯微rk3288和晨星s812有啥区别

资源共享RK3288 Camera硬件说明以及软件配置

嵌入式开发扯淡系列1-浅谈uboot