+linux-Uboot调试
串口波特率:1500000
修改Device Drivers
正在上传…重新上传取消正在上传…重新上传取消
正在上传…重新上传取消正在上传…重新上传取消
为修改报错进行以下调试:
对比开发板的bootenv和板子的bootenv可知
正在上传…重新上传取消正在上传…重新上传取消
对应的dtb_name和fdtcontroladdr不一样,为此进行环境变量和源码的修改编译。
修改/home/rk3399/rk3399/buildroot-rk3399/u-boot源码
vi arch/arm/include/asm/arch-rockchip/spl_resource_img.h
1.1 vi arch/arm/include/asm/arch-rockchip/spl_resource_img.h
//#define DTB_FILE "rk-kernel.dtb"
#define DTB_FILE "rk3399-nanopi4-rev00.dtb"
正在上传…重新上传取消正在上传…重新上传取消
1.2 vi arch/arm/mach-rockchip/resource_img.c
/*#define DTB_FILE "rk-kernel.dtb"*/
#define DTB_FILE "rk3399-nanopi4-rev00.dtb"
正在上传…重新上传取消正在上传…重新上传取消
1.3 vi /home/rk3399/rk3399/buildroot-rk3399/u-boot/include/configs/rockchip-common.h
#define RKIMG_BOOTCOMMAND \
"setenv dtb_name rk3399-nanopi4-rev00.dtb;" \
"setenv fdtcontroladdr 0x8300000;" \
"bootrkp;" \
"run distro_bootcmd;"
正在上传…重新上传取消正在上传…重新上传取消
1.4 vi .config
修改uboot延时1s->2s
CONFIG_BOOTDELAY=1
àCONFIG_BOOTDELAY=2
正在上传…重新上传取消正在上传…重新上传取消
CONFIG_ENV_IS_IN_MMC is not set ----> CONFIG_ENV_IS_IN_MMC=y
正在上传…重新上传取消正在上传…重新上传取消
此配置可以增加saveenv命令到emmc处。
make savedefconfig
mv defconfig ./configs/nanopi4_defconfig
1.5修改配置:
make menuconfig
Command line interface --->Environment commands --->[*] saveenv
cd buildroot
make list-defconfigs
适合FriendlyELEC RK3399(板子型号)的配置所下:
friendlyelec_rk3399_defconfig - Build for friendlyelec_rk3399
使用menuconfig更改配置
make friendlyelec_rk3399_defconfig
make menuconfig
make savedefconfig
diff .defconfig configs/friendlyelec_rk3399_defconfig
cp .defconfig configs/friendlyelec_rk3399_defconfig
重新编译
cd ../
./build.sh buildroot
sudo ./build.sh emmc-img 在scripts/sd-fuse/buildroot生成镜像
cp ./scripts/sd-fuse/buildroot /mnt/hgfs/3399/
正在上传…重新上传取消正在上传…重新上传取消
u-boot修改记录:
第1次修改:主要目的是为了找到DTB和FDT,启动kernel。
修改源码:
vi arch/arm/include/asm/arch-rockchip/spl_resource_img.h
//#define DTB_FILE "rk-kernel.dtb"
#define DTB_FILE "rk3399-nanopi4-rev00.dtb"
正在上传…重新上传取消正在上传…重新上传取消
vi arch/arm/mach-rockchip/resource_img.c
/*#define DTB_FILE "rk-kernel.dtb"*/
#define DTB_FILE "rk3399-nanopi4-rev00.dtb"
正在上传…重新上传取消正在上传…重新上传取消
修改uboot延时1s->2s
CONFIG_BOOTDELAY=1
àCONFIG_BOOTDELAY=2
正在上传…重新上传取消正在上传…重新上传取消
make savedefconfig
mv defconfig ./configs/nanopi4_defconfig
cd ..
./build.sh uboot
拷贝一级loader和二级loader到共享目录,使用RKDevTool进行烧写到emmc中。
cd ./u-boot
cp rk3399_loader_v1.24.126.bin /mnt/hgfs/3399/
cp uboot.img /mnt/hgfs/3399/
cp trust.img /mnt/hgfs/3399/
正在上传…重新上传取消正在上传…重新上传取消
修改结果:uboot延时启动kernel成功,启动kernel失败,仍然有以上报错出现。
第2次修改:主要为了增加saveenv指令,方便调试。
修改源码:
vi arch/arm/include/asm/arch-rockchip/spl_resource_img.h
//#define DTB_FILE "rk-kernel.dtb"
#define DTB_FILE "rk3399-nanopi4-rev29.dtb"
vi arch/arm/mach-rockchip/resource_img.c
/*#define DTB_FILE "rk-kernel.dtb"*/
#define DTB_FILE "rk3399-nanopi4-rev29.dtb"
make menuconfig
ARM architecture->[*] Enable support for distro dtb early
Command line interface --->Environment commands --->[*] saveenv
保存配置,重新编译UBOOT:
make savedefconfig
mv defconfig ./configs/nanopi4_defconfig
cd ..
./build.sh uboot
拷贝一级loader和二级loader到共享目录,使用RKDevTool进行烧写到emmc中。
cd ./u-boot
cp rk3399_loader_v1.24.126.bin /mnt/hgfs/3399/
cp uboot.img /mnt/hgfs/3399/
cp trust.img /mnt/hgfs/3399/
正在上传…重新上传取消正在上传…重新上传取消
修改结果:uboot延时启动4s成功,启动kernel失败,仍然有以上报错出现,同时bootenv中并没有出现saveenv指令。
第3次修改:主要是为了增加saveenv指令,开启写入emmc功能。
修改源码:
vi ~/rk3399/buildroot-rk3399/u-boot/.config
CONFIG_CMD_BOOT_ANDROID=y ---> # CONFIG_CMD_BOOT_ANDROID is not set
CONFIG_ENV_IS_IN_MMC is not set ----> CONFIG_ENV_IS_IN_MMC=y
此配置可以增加saveenv命令到emmc处。
保存配置,重新编译UBOOT:
make savedefconfig
mv defconfig ./configs/nanopi4_defconfig
cd ..
./build.sh uboot
拷贝一级loader和二级loader到共享目录,使用RKDevTool进行烧写到emmc中。
cd ./u-boot
cp rk3399_loader_v1.24.126.bin /mnt/hgfs/3399/
cp uboot.img /mnt/hgfs/3399/
cp trust.img /mnt/hgfs/3399/
正在上传…重新上传取消正在上传…重新上传取消
进入uboot的命令行,修改bootcmd
bootcmd=boot_android ${devtype} ${devnum};bootrkp;run distro_bootcmd;
saveenv
reset
修改结果:uboot延时启动成功,启动kernel失败,仍然有以上报错出现。但是saveenv指令已经编译入内核同时可以正常写入emmc。
第4次修改:主要是为了正常启动kernel。
make list-defconfigs
适合FriendlyELEC RK3399(板子型号)的配置所下:
friendlyelec_rk3399_defconfig - Build for friendlyelec_rk3399
使用menuconfig更改配置
make friendlyelec_rk3399_defconfig
make menuconfig
make savedefconfig
diff .defconfig configs/friendlyelec_rk3399_defconfig
cp .defconfig configs/friendlyelec_rk3399_defconfig
重新编译
cd ../
./build.sh buildroot
sudo ./build.sh emmc-img 在scripts/sd-fuse/buildroot生成镜像
cp ./scripts/sd-fuse/buildroot /mnt/hgfs/3399/
正在上传…重新上传取消正在上传…重新上传取消
串口进入uboot命令行界面,修改环境变量
setenv dtb_name rk3399-nanopi4-rev00.dtb
setenv fdtcontroladdr 0x8300000
saveenv
print dtb_name
print fdtcontroladdr
bootrkp
使用setenv和saveenv对环境变量进行修改,
修改结果:修改后使用bootrkp可启动kernel,但是在kernel使用reboot重新进入boot命令行界面环境变量会复原。修改bootcmd则不会复原。
第5次修改: 主要是为了让uboot自动寻址启动kernel。
修改uboot源码:
vi /home/rk3399/rk3399/buildroot-rk3399/u-boot/include/configs/rockchip-common.h
#define RKIMG_BOOTCOMMAND \
"setenv dtb_name rk3399-nanopi4-rev00.dtb;" \
"setenv fdtcontroladdr 0x8300000;" \
"bootrkp;" \
"run distro_bootcmd;"
正在上传…重新上传取消正在上传…重新上传取消
修改配置:
make menuconfig bootdelay时间为3s
保存配置后编译:
make savedefconfig
mv defconfig ./configs/nanopi4_defconfig
cd ..
./build.sh uboot
cp rk3399_loader_v1.24.126.bin /mnt/hgfs/3399/
cp uboot.img /mnt/hgfs/3399/
cp trust.img /mnt/hgfs/3399/
cd ./u-boot
正在上传…重新上传取消正在上传…重新上传取消
设备树路径:/home/rk3399/rk3399/buildroot-rk3399/kernel/arch/arm64/boot/dts/rockchip 设备树反编译:dtc -I dtb -O dts -o my.dts rk3399-nanopi4-rev00.dtb vi my.dts可以查看设备树配置 |
将镜像全部烧写到emmc中,重启设备。
修改结果:正常启动内核。
正在上传…重新上传取消正在上传…重新上传取消
正在上传…重新上传取消正在上传…重新上传取消
正在上传…重新上传取消正在上传…重新上传取消
正在上传…重新上传取消正在上传…重新上传取消
CONFIG_DM_MDIO=y
CONFIG_DM_ETH_PHY=y
CONFIG_RGMII=y
CONFIG_ENV_IS_IN_MMC=y