全志D1s/F133学习笔记(2)——MangoPi-MQ(芒果派麻雀)Tina系统编译烧录

  • 站在晕哥的肩膀上,总结下麻雀的上手编译流程 。
  • 先粗浅的分析一下适配开发板需要做做的修改。
  • 做一些简单的总结和注释 。

一、SDK和资料:


二、SDK结构:

官方介绍:Tina Linux 系统介绍
Tina Linux 基于 openwrt-14.07 版本的,可以参考下 MT7628学习笔记(3)——openwrt源码目录分析(OpenWrt CC1505 版本移植)

Tina-SDK/
├── build		# 构建系统文件
├── config		# 配置菜单的界面以及一些固定的配置项,该配置菜单基于内核的 mconf 规格编写
├── Config.in	# 菜单项配置文件。和 make menuconfig 相关联的文件
├── device		# 用于存放方案的配置文件,包括内核配置、env 配置、分区表配置、sys_config.fex(全志定制板级配置文件)、board.dts(linux标准设备树文件) 等
├── dl			# 软件包文件
├── lichee		# 存放 bootloader、linux内核、DSP等代码
├── Makefile	# 在顶层目录执行 make 命令的入口文件
├── out			# 编译相关的临时文件和最终镜像文件 ,编译后自动生成此目录
├── package		# 存放Tina系统支持的软件包源码和编译规则
├── prebuilt	# 存放预编译交叉编译器
├── rules.mk	# 定义了 Makefile 中使用的一些通用变量和函数
├── scripts		# 存放host端(PC端,下同)或target端(小机端,即目标机器,下同)使用的一些脚本
├── target		# 存放目标板相关的配置以及sdk和toolchain生成的规格
├── tmp			# 临时文件夹。编译过程中的临时文件保存。
├── toolchain	# 交叉工具链构建配置、规则
└── tools		# 存放 host 端工具的编译规则

三、环境配置

# 更新
$ sudo apt-get update

# 安装软件工具包
$ sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 -y

# Ubuntu 16.04以上版本执行
sudo apt-get install libc6:i386 libstdc++6:i386 lib32ncurses5 lib32z1

四、打补丁匹配麻雀开发板

5寸800x480,4.3寸480x272补丁:芒果派麻雀固件与源码补丁2021-12-16.7z

补丁修改文件分析:

config 配置修改:

lichee/
└── brandy-2.0
    └── u-boot-2018
        └── .config

以下是 .config 配置文件修改的地方:

#
# sunxi board feature
#
CONFIG_SUNXI_ADVERT_PICTURE=y

#
# SUNXI LOGO DISPLAY
#
# CONFIG_HDMI2_DISP2_SUNXI is not set

#
# LCD panels select
#
CONFIG_LCD_SUPPORT_WILLIAMLCD=y
CONFIG_LCD_SUPPORT_LQ101R1SX03=y
CONFIG_LCD_SUPPORT_INET_DSI_PANEL=y
# CONFIG_LCD_SUPPORT_BP101WX1 is not set
# CONFIG_LCD_SUPPORT_K101IM2QA04 is not set
# CONFIG_LCD_SUPPORT_K101IM2BYL02L is not set
# CONFIG_LCD_SUPPORT_FX070 is not set
# CONFIG_LCD_SUPPORT_K080_IM2HYL802R_800X1280 is not set
# CONFIG_LCD_SUPPORT_TFT08006 is not set

在以下位置增加对应的开发板/方案配置:

.
├── device
│   └── config
│       └── chips
│           └── d1
│               └── configs
│                   ├── mangopi_mq_rgb480x272_rtp
│                   └── mangopi_mq_rgb800x480_gt9xx
├── package
│   └── allwinner
│       └── alsa-conf-aw
│           └── files
│               └── d1
│                   ├── d1-mangopi_mq_rgb480x272_rtp
│                   └── d1-mangopi_mq_rgb800x480_gt9xx
└── target
    └── allwinner
        ├── d1-mangopi_mq_rgb480x272_rtp
        └── d1-mangopi_mq_rgb800x480_gt9xx

开发板/方案名的定义在:/target/allwinner/d1-mangopi_mq_rgb800x480_gt9xx/vendorsetup.sh

add_lunch_combo d1_mangopi_mq_rgb800x480_gt9xx-tina

五、配置和编译

# 把补丁解压到SDK目录下就行了
tar -xzvf d1-mangopi_mq_20211216.tgz	<sdk目录>

选择对应的开发板/方案 d1_mangopi_mq_rgb800x480_gt9xx-tina

# 获取环境变量(打开新终端时执行)
source build/envsetup.sh

# 方案选择(打开新终端时执行)
$ lunch

You're building on Linux

Lunch menu... pick a combo:
     1. d1_mangopi_mq_rgb480x272_rtp-tina	# 麻雀 480x272屏
     2. d1_mangopi_mq_rgb800x480_gt9xx-tina	# 麻雀 800x480屏
     3. d1_nezha_min-tina					# d1_nezha-tina 是哪吒d1标准方案
     4. d1_nezha-tina						# d1_nezha_min-tina 是哪吒d1只能让系统跑起来的最小系统方案

Which would you like? [Default d1_nezha]: 2
============================================
TINA_BUILD_TOP=/home/pjw/Allwinner/D1s/tina-d1-open
TINA_TARGET_ARCH=riscv
TARGET_PRODUCT=d1_mangopi_mq_rgb800x480_gt9xx
TARGET_PLATFORM=d1
TARGET_BOARD=d1-mangopi_mq_rgb800x480_gt9xx
TARGET_PLAN=mangopi_mq_rgb800x480_gt9xx
TARGET_BUILD_VARIANT=tina
TARGET_BUILD_TYPE=release
TARGET_KERNEL_VERSION=5.4
TARGET_UBOOT=u-boot-2018
TARGET_CHIP=sun20iw1p1
============================================

# 编译
make -j16
# 编译完成
#### make completed successfully (25:29 (mm:ss)) ####

# 打包,将编译好的固件打包成一个.img格式的固件。
# 固件路径 /out/d1-mangopi_mq_rgb800x480_gt9xx/tina_d1-mangopi_mq_rgb800x480_gt9xx_uart0.img
pack

# BuildImg 0
# Dragon execute image.cfg SUCCESS !
# ----------image is for nand/emmc----------
# ----------image is at----------
# 
# tina-d1-open/out/d1-mangopi_mq_rgb800x480_gt9xx/tina_d1-mangopi_mq_rgb800x480_gt9xx_uart0.img
# 
# pack finish

单独编译命令:

# 单独编译boot0和uboot:(可在Tina任意目录下使用)
mboot
# 单独编译boot0:(可在Tina任意目录下使用)
mboot0
# 单独编译uboot:(可在Tina任意目录下使用)
muboot
# 单独编译内核:(可在Tina任意目录下使用)
mkernel

# 单独编译某个包:(只能在编译的包路径下操作)
# 如包路径为 tina/package/utils/rwcheck,则需要进入到 tina/package/utils/rwcheck路径下再输入 mm 命令,
# 编译出来对应的安装包的路径在 tina/out/d1-nezha/packages/base下
mm

# 在根目录下编译某个软件包:(需要在根目录下操作)
make <应用包的路径>/install	# 如 make package/utils/rwcheck/install

# 在根目录下清空应用包临时文件:(需要在根目录下操作)
make <应用包的路径>/clean		# 如 make package/utils/rwcheck/clean

六、烧录

全志在线开发者社区——工具下载
固件在 out/d1-mangopi_mq_rgb800x480_gt9xx/tina_d1-mangopi_mq_rgb800x480_gt9xx_uart0.img,这里使用 PhoenixCard 烧录:
在这里插入图片描述

七、上电运行

TF卡插入开发板上电,uart0 为控制台。

uart0 引脚示意:

运行LVGL:


八、补丁包修改

上面运行后发现刚上电屏幕很亮,但是过一会屏幕就变暗了(或者说变蓝了),这不能忍。

1、原因分析

通过日志看到是在启动内核后变暗的。
这个是启动内核后出现的,看一下内核设备树,可以发现 PD17 引脚被 dmic 占用了:
tina-d1-open/lichee/linux-5.4/arch/riscv/boot/dts/sunxi/sun20iw1p1.dtsi

rgb18_pins_a: rgb18@0 {
	pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", \
		"PD6", "PD7", "PD8", "PD9", "PD10", "PD11", \
		"PD12", "PD13", "PD14", "PD15", "PD16", "PD17", \
		"PD18", "PD19", "PD20", "PD21";
	function = "lcd0";
	drive-strength = <30>;
	bias-disable;
};

tina-d1-open/device/config/chips/d1/configs/mangopi_mq_rgb800x480_gt9xx/board.dts(这里是编译后拷贝了 linux-5.4/board.dts

dmic_pins_a: dmic@0 {
	/* DMIC_PIN: CLK, DATA0, DATA1, DATA2 */
	pins = "PE17", "PB11", "PB10", "PD17";
	function = "dmic";
	drive-strength = <20>;
	bias-disable;
};

LCD部分原理图:
在这里插入图片描述

2、修改方法

修改设备树,把 dmic 关了。
tina-d1-open/device/config/chips/d1/configs/mangopi_mq_rgb800x480_gt9xx/linux-5.4/board.dts
tina-d1-open/device/config/chips/d1/configs/mangopi_mq_rgb480x272_rtp/linux-5.4/board.dts

&dmic {
	pinctrl-names   = "default","sleep";
	pinctrl-0       = <&dmic_pins_a>;
	pinctrl-1       = <&dmic_pins_b>;
	status = "disabled";
};

3、编译运行

make -j16
pack

注:这里不清楚为什么用 make -j16 是正常的,但是 mkernelpack 生成的img只有 20.2M,没有把文件系统打包进去。



附:部分开机LOG

[32]HELLO! BOOT0 is starting!
[35]BOOT0 commit : 27369ab
[38]set pll start
[39]periph0 has been enabled
[42]set pll end
[44][pmu]: bus read error
[46]board init ok
[48]ZQ value = 0x2f***********
[51]get_pmu_exist() = -1
[53]ddr_efuse_type: 0xa
[56][AUTO DEBUG] single rank and full DQ!
[60]ddr_efuse_type: 0xa
[63][AUTO DEBUG] rank 0 row = 13 
[66][AUTO DEBUG] rank 0 bank = 4 
[69][AUTO DEBUG] rank 0 page size = 2 KB 
[73]DRAM BOOT DRIVE INFO: V0.24
[75]DRAM CLK = 528 MHz
[78]DRAM Type = 2 (2:DDR2,3:DDR3)
[81]DRAMC read ODT  off.
[83]DRAM ODT off.
[85]ddr_efuse_type: 0xa
[88]DRAM SIZE =64 M
[91]DRAM simple test OK.
[93]dram size =64
[95]card no is 0
[97]sdcard 0 line count 4
[99][mmc]: mmc driver ver 2021-04-2 16:45
[108][mmc]: Wrong media type 0x0
[111][mmc]: ***Try SD card 0***
[120][mmc]: HSSDR52/SDR25 4 bit
[123][mmc]: 50000000 Hz
[125][mmc]: 29819 MB
[127][mmc]: ***SD/MMC 0 init OK!!!***
[175]Loading boot-pkg Succeed(index=0).
[179]Entry_name        = opensbi
[182]Entry_name        = u-boot
[185]Entry_name        = dtb
[188]mmc not para
[190]Jump to second Boot.

OpenSBI v0.6
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name          : T-HEAD Xuantie Platform
Platform HART Features : RV64ACDFIMSUVX
Platform Max HARTs     : 1
Current Hart           : 0
Firmware Base          : 0x40000400
Firmware Size          : 75 KB
Runtime SBI Version    : 0.2

MIDELEG : 0x0000000000000222
MEDELEG : 0x000000000000b1ff
PMP0    : 0x0000000040000000-0x000000004001ffff (A)
PMP1    : 0x0000000040000000-0x000000007fffffff (A,R,W,X)
PMP2    : 0x0000000080000000-0x00000000bfffffff (A,R,W,X)
PMP3    : 0x0000000000020000-0x0000000000027fff (A,ÿ

U-Boot 2018.05-g0a88ac9-config-dirty (Dec 18 2021 - 22:57:39 +0800) Allwinner Technology

[00.273]DRAM:  64 MiB
[00.276]Relocation Offset is: 01ef0000
[00.280]secure enable bit: 0
[00.283]CPU=1008 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz  MBus=300Mhz
[00.289]flash init start
[00.291]workmode = 0,storage type = 1
[00.295][mmc]: mmc driver ver uboot2018:2021-04-16 14:23:00-1
[00.300][mmc]: get sdc_type fail and use default host:tm1.
[00.306][mmc]: can't find node "mmc0",will add new node
[00.311][mmc]: fdt err returned <no error>
[00.315][mmc]: Using default timing para
[00.319][mmc]: SUNXI SDMMC Controller Version:0x50310
[00.336][mmc]: card_caps:0x3000000a
[00.339][mmc]: host_caps:0x3000003f
[00.343]sunxi flash init ok
[00.345]line:714 init_clocks
__clk_init: clk pll_periph0x2 already initialized
register fix_factor clk error
[00.355]drv_disp_init
fdt_getprop_u32 s_pwm.pwm-base fail
[00.371]drv_disp_init finish
[00.374]boot_gui_init:start
[00.377]set disp.dev2_output_type fail. using defval=0
[00.383]boot_gui_init:finish
partno erro : can't find partition bootloader
54 bytes read in 1 ms (52.7 KiB/s)
[00.399]bmp_name=bootlogo.bmp size 1152054
1152054 bytes read in 49 ms (22.4 MiB/s)
[00.467]Loading Environment from SUNXI_FLASH... OK
[00.486]out of usb burn from boot: not need burn key
root_partition is rootfs
set root to /dev/mmcblk0p5
[00.496]update part info
[00.498]update bootcmd
[00.501]change working_fdt 0x42aafda8 to 0x42a8fda8
[00.522]update dts
Hit any key to stop autoboot:  0 
[00.563]LCD open finish
Android's image name: d1-mangopi_mq_rg
No reserved memory region found in source FDT
[00.949]
Starting kernel ...

[00.952][mmc]: MMC Device 2 not found
[00.955][mmc]: mmc 2 not find, so not exit
[    0.000000] OF: fdt: Ignoring memory range 0x40000000 - 0x40200000
[    0.000000] Linux version 5.4.61 (pjw@pjw-virtual-machine) (riscv64-unknown-linux-gnu-gcc (C-SKY RISCV Tools V1.8.4 B20200702) 8.1.0, GNU ld (GNU Binutils) 2.32) #2 PREEMPT Sat Dec 18 15:37:58 UTC 2021

...

...

[   27.540277] sunxi-mmc 4021000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[   27.578724] sunxi-mmc 4021000.sdmmc: smc 1 p1 err, cmd 52, RTO !!
[   27.586457] sunxi-mmc 4021000.sdmmc: smc 1 p1 err, cmd 52, RTO !!
[   27.593325] sunxi-mmc 4021000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[   27.668549] sunxi-mmc 4021000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[   27.692998] sunxi-mmc 4021000.sdmmc: smc 1 p1 err, cmd 5, RTO !!
[   27.700623] sunxi-mmc 4021000.sdmmc: smc 1 p1 err, cmd 5, RTO !!
[   27.708244] sunxi-mmc 4021000.sdmmc: smc 1 p1 err, cmd 5, RTO !!
[   27.715867] sunxi-mmc 4021000.sdmmc: smc 1 p1 err, cmd 5, RTO !!
[   27.722638] sunxi-mmc 4021000.sdmmc: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B
Trying to connect to SWUpdate...
[   32.211668] [SNDCODEC][sunxi_card_hw_params][620]:stream_flag: 0



BusyBox v1.27.2 () built-in shell (ash)

 _____  _              __     _
|_   _||_| ___  _ _   |  |   |_| ___  _ _  _ _
  | |   _ |   ||   |  |  |__ | ||   || | ||_'_|
  | |  | || | || _ |  |_____||_||_|_||___||_,_|
  |_|  |_||_|_||_|_|  Tina is Based on OpenWrt!
 ----------------------------------------------
 Tina Linux (Neptune, 5C1C9C53)
 ----------------------------------------------
root@TinaLinux:/# [  126.670732] random: crng init done
[  126.674537] random: 6 urandom warning(s) missed due to ratelimiting
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值