玩转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--添加自己的板级包的主要内容,如果未能解决你的问题,请参考以下文章