文章目录

  • 一、SDK和资料:
  • 二、SDK结构:
  • 三、环境配置
  • 四、打补丁匹配麻雀开发板
    • 补丁修改文件分析:
  • 五、配置和编译
  • 六、烧录
  • 七、上电运行
  • 八、补丁包修改
    • 1、原因分析
    • 2、修改方法
    • 3、编译运行
  • 附:部分开机LOG
  • 站在晕哥的肩膀上,总结下麻雀的上手编译流程 。
  • 先粗浅的分析一下适配开发板需要做做的修改。
  • 做一些简单的总结和注释 。

一、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# 方案选择(打开新终端时执行)
$ lunchYou're building on LinuxLunch 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.2MIDELEG : 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: 0BusyBox 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

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

  1. 全志D1s/F133学习笔记(1)——MangoPi-MQ(芒果派麻雀)上手试玩

    一.资料 D1s是全志针对智能解码市场推出的高性价比AIoT芯片.它使用64bit RISC-V架构的阿里平头哥C906处理器,内置了64M DDR2,支持Linux系统,同时集成了大量自研的音视频编 ...

  2. linux笔记(9):MangoPi-MQ(芒果派麻雀D1s)Tina系统编译烧录

    文章目录 1.下载相关资料 1.1 WhyCan Forum(哇酷开发者社区)提供的sdk 1.1.1 SDK解压过程 1.2 WhyCan Forum(哇酷开发者社区)提供的补丁 1.2.1 补丁包 ...

  3. 【目录】全志F1C100S/F1C200S学习笔记

    全志F1C100S/F1C200S学习笔记目录 全志F1C100S/F1C200S学习笔记(1)--基础简介及资料 全志F1C100S/F1C200S学习笔记(2)--TF卡分区及系统构建烧录 全志F ...

  4. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  5. haxe php,Haxe学习笔记(一) Haxe:一次编码全平台编译的神话

    Haxe学习笔记(一) Haxe:一次编码全平台编译的神话 一 Haxe是什么? Haxe是开源的,它作为一门语言,基础语法和ActionScript3基本一致.所以任何做过Flash开发的人都可以很 ...

  6. QT学习笔记(二):QT MinGW 和 MSVC 编译方式

    QT学习笔记(二):QT MinGW 和 MSVC 编译方式 Qt 中有两种方式编译:一种是MinGW ,另一种MSVC,是使用两种不同的编译器. 1.MSVC是指微软的VC编译器: 2.MingGW ...

  7. 51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)

    51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程 第一课 Linux运维经验分享与思路 1.一般把主机名,写到hosts下    127.0.0.1    hostname,因为 ...

  8. 全志芒果派麻雀开发板----新建一个分区并挂载(1)

    目录 吐槽--开发板全都是吃灰的 正文: (一)找资料的办法! (二)新建分区 (三)分区的挂载 1,建立文件夹(这一步我就想了很久,怎么建立完还能打包到烧录包里) 2,分区挂载到文件夹上: 3,新建 ...

  9. 全志D1/D1s芯片:芒果派麻雀点RGB屏填坑

    前言 最近全志推出了D1处理器,搭载平头哥玄铁906 RISC-V的应用处理器.于是准备入手玩一下,买了芒果派做了基于D1s的麻雀板,D1s是D1内封64M DDR的版本,去掉了hdmi输出,号称点屏 ...

最新文章

  1. 图像特征提取:图像的矩特征
  2. 基于vuejs的移动端分页代码
  3. iangularjs 模板,AngularJS模板中的三元运算符
  4. java计算器如何实现运算_用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢...
  5. Python 零基础入门
  6. rdd数据存内存 数据量_Spark 性能优化(二)——数据倾斜优化
  7. 下一代终端保护六大支柱
  8. 2019年中秋读者福利,你中奖了吗??
  9. 现代控制理论(1)——状态空间表达式
  10. 宾得k5ii_K5--K5II---K5IIs,该选哪个?(喜欢宾得机的摄友)各抒己见。
  11. PS 快捷键大全(psshortcut)
  12. 机器学习算法工程师面试经历
  13. 关于电脑登录微信会出现闪(跳)黑屏的处理办法
  14. 如何把kafka Log4j1.x升级到Log4j2.x ?
  15. 奇怪的键盘按a截图了
  16. 是非人生 — 一个菜鸟程序员的5年职场路 第30节
  17. php人人商城定时任务,人人商城异步操作菜单示例
  18. python语言程序代码保存在_《计算机二级Python语言程序设计考试》第5章:函数和代码复用...
  19. 医学院交换去计算机学院,皖南医学院学生2018年赴台湾元培医事科技大学参加交换生项目交流心得...
  20. 【SQLite3+Qt开发】SQLite3简要介绍+在Qt5中的使用步骤

热门文章

  1. --TG语言包--TG解除双向聊天限制
  2. Spring cloud的分布式事务解决方案(txlcn)
  3. 拉瓦尔四眼影(桃子)
  4. mac下直接运行python脚本
  5. Javascript数据类型及函数
  6. 玩家王者荣耀五排带妹撞车梦泪:实力差距太大,这样操作都被虐!
  7. 新东方人工智能中台建设和AI部门管理经验分享
  8. Fiddler + 雷电模拟器抓包软件数据
  9. H5性能优化与体验优化——极致篇
  10. 微信小程序实战-仿盒马鲜生