文章目录
- 站在晕哥的肩膀上,总结下麻雀的上手编译流程 。
- 先粗浅的分析一下适配开发板需要做做的修改。
- 做一些简单的总结和注释 。
一、SDK和资料:
- SDK百度云下载:提取码: 6666 解压密码: whycan.com
- SDK官方下载:全志客户服务平台-SDK下载
- 官方下载说明:资源下载说明
- 官方教程:D1 官方在线开发教程
二、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
是正常的,但是 mkernel
再 pack
生成的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