全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述

1. 目的

将调试信息打印串口由uart0改为uart3。

2. 版本信息

Uboot版本:2014.07;
Kernel版本:Linux-3.10;

二,Uboot

1. sys_config.fex改动

使能uart3(TX:PH00 RX:PH01),并让boot0,uboot的debug串口由uart0改为uart3(TX:PH00 RX:PH01)

diff --git a/pack/chips/sun8iw11p1/configs/a40i-p3/sys_config.fex b/pack/chips/sun8iw11p1/configs/a40i-p3/sys_config.fex index 159d3fa..afe98fe 100755
--- a/pack/chips/sun8iw11p1/configs/a40i-p3/sys_config.fex
+++ b/pack/chips/sun8iw11p1/configs/a40i-p3/sys_config.fex@@ -111,9 +111,9 @@ twi_scl         = port:PB0<2><default><default><default>twi_sda         = port:PB1<2><default><default><default>[uart_para]-uart_debug_port = 0-uart_debug_tx         = port:PB22<2><1><default><default>-uart_debug_rx         = port:PB23<2><1><default><default>+uart_debug_port = 3+uart_debug_tx         = port:PH00<4><1><default><default>+uart_debug_rx         = port:PH01<4><1><default><default>[jtag_para]jtag_enable     = 1@@ -387,7 +387,7 @@ uart2_rx         = port:PI19<7><1><default><default>[uart3]-uart3_used       = 0+uart3_used       = 1uart3_port       = 3uart3_type       = 2uart3_tx         = port:PH00<4><1><default><default>

2. 宏定义改动

brandy/u-boot-2014.07/include/configs/sunXXX.h路径中,修改如下:

diff --git a/u-boot-2014.07/include/configs/sun8iw11p1.h b/u-boot
2014.07/include/configs/sun8iw11p1.h
index b733162..22390a9 100755
--- a/u-boot-2014.07/include/configs/sun8iw11p1.h
+++ b/u-boot-2014.07/include/configs/sun8iw11p1.h
@@ -282,7 +282,7 @@
#define CONFIG_SYS_NS16550_COM4                SUNXI_UART3_BASE
#define CONFIG_NS16550_FIFO_ENABLE     (1)
-#define CONFIG_CONS_INDEX                      1                       /* 
which serial channel for console */
+#define CONFIG_CONS_INDEX                      4                       /* 
which serial channel for console */
#define CONFIG_SETUP_MEMORY_TAGS

CONFIG_CONS_INDEX=4,对应serial3 ;如下表:

串口通道CONFIG_CONS_INDEX
serial01
serial12
serial23
serial34
serial45
serial56

指定波特率:

 #define CONFIG_BAUDRATE             115200

3. 初始化改动

boot0已经限制了仅使用uart0,将这一修改去掉,将会按照sys_config.fex中的uart_debug_port配置的uart端口输出信息。

 diff --git a/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/spl/serial_spl.c 
b/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/spl/serial_spl.cindex 3f6c141..70955df 100644--- a/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/spl/serial_spl.c+++ b/u-boot-2014.07/arch/arm/cpu/armv7/sun8iw11p1/spl/serial_spl.c@@ -44,10 +44,10 @@ void sunxi_serial_init(int uart_port, void *gpio_cfg, 
int gpio_max)u32 reg, i;u32 uart_clk;
-       if( (uart_port < 0) ||(uart_port > 0) )
-       {
-               return;-       }+       // if( (uart_port < 0) ||(uart_port > 0) )+       // {+       //      return;+       // }//resetreg = readl(CCMU_BUS_SOFT_RST_REG4);reg &= ~(1<<(CCM_UART_PORT_OFFSET + uart_port));

4. 打包改动

由于平台适配性问题,在更改了uart_para参数后,会出现采用PhoenixSuit无法烧录固件的情况。由于在pack阶段,会解析sys_confg.fex的uart_para配置项,然后更新boot0,fes1,uboot的头部信息,路径(tools/pack/pack

 update_fes1  fes1.fex           sys_config.bin > /dev/null

出现无法烧录的原因是pack更新了fes1的头部信息,导致校验不通过,所以需要屏蔽fes1的更新,修改如下:

diff --git a/pack_tools/update_fes1/update_fes1.c 
b/pack_tools/update_fes1/update_fes1.c
index 6134c96..536dfb1 100755--- a/pack_tools/update_fes1/update_fes1.c+++ b/pack_tools/update_fes1/update_fes1.c@@ -230,6 +230,21 @@ int update_for_fes1(char *fes1_name, int storage_type)}}+       fes1_head->prvt_head.uart_port = 0;+       fes1_head->prvt_head.uart_ctrl[0].port      = 2;+       fes1_head->prvt_head.uart_ctrl[0].port_num  = 22;+       fes1_head->prvt_head.uart_ctrl[0].mul_sel   = 2;+       fes1_head->prvt_head.uart_ctrl[0].pull      = 1;+       fes1_head->prvt_head.uart_ctrl[0].drv_level = -1;+       fes1_head->prvt_head.uart_ctrl[0].data      = -1;++       fes1_head->prvt_head.uart_ctrl[1].port      = 2;+       fes1_head->prvt_head.uart_ctrl[1].port_num  = 23;+       fes1_head->prvt_head.uart_ctrl[1].mul_sel   = 2;+       fes1_head->prvt_head.uart_ctrl[1].pull      = 1;+       fes1_head->prvt_head.uart_ctrl[1].drv_level = -1;+       fes1_head->prvt_head.uart_ctrl[1].data      = -1;+//取出数据进行修正,debugenable参数if(!script_parser_fetch("jtag_para", "jtag_enable", value)){

更新update_fes1工具:进入brandy/pack_tools/update_fes1/ 目录,执行make命令,用生成的 update_fes1覆盖tools/pack/pctools/linux/mod_update/update_fes1 ,再进行 pack 操作即可。
但这样会造成fes1的输出依然还是uart0,所以我们需要更改fes1的代码,如下:

diff --git a/lichee/brandy/u-boot-2014.07/sunxi_spl/fes_init/main/fes1_main.c b/lichee/brandy/u-boot-2014.07/sunxi_spl/fes_init/main/fes1_main.c
index 31a01017c5..1b794e2010 100755
--- a/lichee/brandy/u-boot-2014.07/sunxi_spl/fes_init/main/fes1_main.c
+++ b/lichee/brandy/u-boot-2014.07/sunxi_spl/fes_init/main/fes1_main.c
@@ -101,9 +101,35 @@ int main(void){__s32 dram_size=0;-       timer_init();
+       timer_init();       
+if(CONFIG_CONS_INDEX == 4)
+{
+               boot0_file_head_t fes1_head_fix;
+               fes1_head_fix.prvt_head.uart_port = 3;
+               fes1_head_fix.prvt_head.uart_ctrl[0].port = 8;      
+               fes1_head_fix.prvt_head.uart_ctrl[0].port_num  = 0;
+               fes1_head_fix.prvt_head.uart_ctrl[0].mul_sel  = 4;
+               fes1_head_fix.prvt_head.uart_ctrl[0].pull   = 1;   
+               fes1_head_fix.prvt_head.uart_ctrl[0].drv_level = -1;
+               fes1_head_fix.prvt_head.uart_ctrl[0].data = -1;      
+               
+
+               fes1_head_fix.prvt_head.uart_ctrl[1].port  = 8;
+               fes1_head_fix.prvt_head.uart_ctrl[1].port_num  = 0;
+               fes1_head_fix.prvt_head.uart_ctrl[1].mul_sel  = 4;
+               fes1_head_fix.prvt_head.uart_ctrl[1].pull   = 1;
+               fes1_head_fix.prvt_head.uart_ctrl[1].drv_level = -1;
+               fes1_head_fix.prvt_head.uart_ctrl[1].data = -1;
+               
+               //serial init
+               sunxi_serial_init(fes1_head_fix.prvt_head.uart_port, (void *)fes1_head_fix.prvt_head.uart_ctrl, 2);
+ }
+ else
+ {//serial init
-       sunxi_serial_init(fes1_head.prvt_head.uart_port, (void *)fes1_head.prvt_head.uart_ctrl, 2);
+       sunxi_serial_init(fes1_head_fix.prvt_head.uart_port, (void *)fes1_head_fix.prvt_head.uart_ctrl, 2);
+ }
+#ifdef CONFIG_SUNXI_MULITCORE_BOOTpmu_init();set_pll_voltage(1260);

其中,CONFIG_CONS_INDEX即为brandy/u-boot-2014.07/include/configs/sunXXX.h路径中的宏。

5. 启动参数改动

更改uboot传递给kernel的启动参数,路径pack/chips/sun8iw11p1/configs/default/env.cfg可能
因为配置有所不同

diff --git a/pack/chips/sun8iw11p1/configs/default/env.cfg 
b/pack/chips/sun8iw11p1/configs/default/env.cfgindex eb60f41..922057e 100755
--- a/pack/chips/sun8iw11p1/configs/default/env.cfg
+++ b/pack/chips/sun8iw11p1/configs/default/env.cfg@@ -1,9 +1,9 @@#kernel command argumentsenforcing=1-earlyprintk=sunxi-uart,0x01c28000+earlyprintk=sunxi-uart,0x01c28c00initcall_debug=0-console=ttyS0,115200+console=ttyS3,115200nand_root=/dev/systemmmc_root=/dev/mmcblk0p7nor_root=/dev/mtdblock2

重新编译boot0,uboot。


三. Kernel

1. config改动

修改 kernel 的 menuconfig 中 uart 的打印端口和基地址:

diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debugindex 4d17934..3aea83e 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -443,6 +443,13 @@ choiceSay Y here if you want kernel low-level debugging supporton Allwinner A1X based platforms on the UART1.+       config DEBUG_SUNXI_UART3+               bool "Kernel low-level debugging messages via sunXi UART3"+               depends on ARCH_SUNXI+               help+                 Say Y here if you want kernel low-level debugging support+                 on Allwinner A1X based platforms on the UART3.+config DEBUG_TEGRA_UARTdepends on ARCH_TEGRAbool "Use Tegra UART for low-level debug"@@ -662,7 +669,7 @@ config DEBUG_LL_INCLUDEDEBUG_MMP_UART3default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || 
DEBUG_SIRFMARCO_UART1default "debug/socfpga.S" if DEBUG_SOCFPGA_UART-       default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1+       default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1 || DEBUG_SUNXI_UART3default "debug/tegra.S" if DEBUG_TEGRA_UARTdefault "debug/ux500.S" if DEBUG_UX500_UARTdefault "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \
diff --git a/arch/arm/include/debug/sunxi.S b/arch/arm/include/debug/sunxi.Sindex 04eb56d..5f66699 100644--- a/arch/arm/include/debug/sunxi.S+++ b/arch/arm/include/debug/sunxi.S@@ -16,6 +16,9 @@#elif defined(CONFIG_DEBUG_SUNXI_UART1)#define SUNXI_UART_DEBUG_PHYS_BASE 0x01c28400#define SUNXI_UART_DEBUG_VIRT_BASE 0xf1c28400+#elif defined(CONFIG_DEBUG_SUNXI_UART3)+#define SUNXI_UART_DEBUG_PHYS_BASE 0x01c28c00+#define SUNXI_UART_DEBUG_VIRT_BASE 0xf1c28c00#endif.macro  addruart, rp, rv, tmp

增加DEBUG_SUNXI_UART3后,在menuconfig中选择:

make ARCH=arm menuconfig

在这里插入图片描述

2. 设备树改动

dts可改可不改,为了统一,这里的设备树也一起更改,实际上这里的配置会被uboot传递的启动参数覆盖

 diff --git a/arch/arm/boot/dts/sun8iw11p1.dtsi 
b/arch/arm/boot/dts/sun8iw11p1.dtsiindex 526fe29..4e00a86 100755--- a/arch/arm/boot/dts/sun8iw11p1.dtsi+++ b/arch/arm/boot/dts/sun8iw11p1.dtsi@@ -61,7 +61,7 @@};chosen {-               bootargs = "earlyprintk=sunxi-uart,0x01c28000 loglevel=8 
initcall_debug=1 console=ttyS0 init=/init";+               bootargs = "earlyprintk=sunxi-uart,0x01c28c00 loglevel=8 
initcall_debug=1 console=ttyS3 init=/init";linux,initrd-start = <0x0 0x0>;linux,initrd-end = <0x0 0x0>;};

四,文件系统

1. defconfig改动

修改buildroot-201611/configs/sun8iw11p1_defconfig 下的配置:

 diff --git a/configs/sun8iw11p1_defconfig b/configs/sun8iw11p1_defconfigindex e4b6313..89c9e01 100755--- a/configs/sun8iw11p1_defconfig+++ b/configs/sun8iw11p1_defconfig@@ -273,7 +273,7 @@ BR2_SYSTEM_BIN_SH_BASH=y# BR2_SYSTEM_BIN_SH_NONE is not setBR2_SYSTEM_BIN_SH="bash"BR2_TARGET_GENERIC_GETTY=y-BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"+BR2_TARGET_GENERIC_GETTY_PORT="ttyS3"# BR2_TARGET_GENERIC_GETTY_BAUDRATE_KEEP is not set# BR2_TARGET_GENERIC_GETTY_BAUDRATE_9600 is not set# BR2_TARGET_GENERIC_GETTY_BAUDRATE_19200 is not set

注:
执行build.sh编译builroot的过程:
tools/build/mkcommon.sh 会执行buildroot-201611/scripts/mkcommon.sh ,然后在buildroot-201611/scripts/build.sh 的build_buildroot函数中,
会判断是否存在out/sun8iw11p1/linux/common/buildroot/.config
如果存在,则使用该配置,否则使用buildroot-201611/configs/sun8iw11p1_defconfig ,所以需要
清空out目录,或者直接删除out/sun8iw11p1/linux/common/buildroot/.config

如果不确定是否配置成功,可以在buildroot-201611/package/skeleton/skeleton.mk 增加打印:

diff --git a/package/skeleton/skeleton.mk b/package/skeleton/skeleton.mkindex a4788e1..702596b 100644--- a/package/skeleton/skeleton.mk+++ b/package/skeleton/skeleton.mk@@ -223,6 +223,7 @@ endefelse ifeq ($(BR2_INIT_BUSYBOX),y)# Add getty to busybox inittabdefine SKELETON_SET_GETTY+       echo "SKELETON_TARGET_GENERIC_GETTY_PORT$(SKELETON_TARGET_GENERIC_GETTY_PORT)"$(SED) '/# 
GENERIC_SERIAL$$/s~^.*#~$(SKELETON_TARGET_GENERIC_GETTY_PORT)::respawn:/sbin/getty -L $(SKELETON_TARGET_GENERIC_GETTY_OPTIONS) 
$(SKELETON_TARGET_GENERIC_GETTY_PORT) $(SKELETON_TARGET_GENE$(TARGET_DIR)/etc/inittabendef

五,整体重新编译打包

 ./build.sh && ./build.sh pack

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/83559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【五子棋在线对战】二.项目结构设计 实用工具类模板的实现

项目结构设计 1.项目模块划分2.业务处理模块子模块的划分3.实用工具类模板的实现3.1 日志宏的实现3.2 mysql工具3.3 JsonCpp工具3.4 string-Split工具 && file_util工具 1.项目模块划分 ● 数据管理模块&#xff1a;依托 MySQL 数据库&#xff0c;负责用户数据的存储与…

53 python akshare(获取金融数据)

在金融数据获取与分析领域,AkShare是一个强大且灵活的开源库,它提供了丰富的金融数据接口,覆盖股票、期货、期权、基金、债券、外汇等多个金融市场。AkShare更专注于中国金融市场数据,并且支持从多个数据源获取数据,具有更高的稳定性和更全面的数据覆盖。 一、安装akshar…

蓝桥杯17114 残缺的数字

问题描述 七段码显示器是一种常见的显示数字的电子元件&#xff0c;它由七个发光管组成: 图依次展示了数字 0∼9 用七段码来显示的状态&#xff0c;其中灯管为黄色表示点亮&#xff0c;灰色表示熄灭。根据灯管的亮暗状态&#xff0c;我们可以用一个状态码(状态码是一个 7 位的…

Java观察者模式深度解析:构建松耦合事件驱动系统的艺术

目录 观察者模式基础解析核心结构与实现原理Java内置观察者实现Spring框架中的高级应用典型应用场景与实战案例观察者模式变体与优化常见问题与最佳实践总结与未来展望1. 观察者模式基础解析 1.1 模式定义与核心思想 观察者模式(Observer Pattern)是一种行为型设计模式,它…

NocoBase v1.7.0 正式版发布

原文链接&#xff1a;https://www.nocobase.com/cn/blog/nocobase-1-7-0。 新特性 用户角色并集 角色并集是一种权限管理模式&#xff0c;根据系统设置&#xff0c;系统开发者可以选择使用独立角色、允许角色并集&#xff0c;或者仅使用角色并集&#xff0c;以满足不同的权限…

破解通信难题,modbus转profibus网关在高炉水冲渣系统中稳定好用

基于在高炉水冲渣传动监控系统的工艺背景下,稳联技术Profibus-Modbus网关在控制系统中使支持Profibus协议的设备与支持Modbus RTU协议的设备之间进行通讯协议转换的作用,使得支持不同通讯协议的设备之间能够进行数据传递,并且给出了设计方法.应用Profibus-Modbus总线桥WL-ABD30…

开源是什么?我们为什么要开源?

本片为故事类文章推荐听音频哦 软件自由运动的背景 梦开始的地方 20世纪70年代&#xff0c;软件行业处于早期发展阶段&#xff0c;软件通常与硬件捆绑销售&#xff0c;用户对软件的使用、修改和分发权利非常有限。随着计算机技术的发展和互联网的普及&#xff0c;越来越多的开…

Educational Codeforces Round 179 (Rated for Div. 2)(A-E)

题目链接&#xff1a;Dashboard - Educational Codeforces Round 179 (Rated for Div. 2) - Codeforces A. Energy Crystals 思路 贪心地模拟一下过程很容易就看出来了&#xff0c;每次变成尽可能大的数 1 1 0 -> 1 1 3 -> 3 3 5 -> 5 5 11....我们只需要关注最大…

React Native开发鸿蒙运动健康类应用的项目实践记录

​​项目名称​​&#xff1a;HarmonyFitness - 基于React Native的鸿蒙运动健康应用 ​​技术栈​​&#xff1a;React Native 0.72.5 TypeScript HarmonyOS API ArkTS原生模块 一、环境搭建与项目初始化 ​​双环境配置​​ ​​React Native环境​​&#xff1a; npx re…

Linux --UDP套接字实现简单的网络聊天室

一、Server端的实现 1.1、服务端的初始化 ①、创建套接字&#xff1a; 创建套接字接口&#xff1a; #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); //1. 这是一个创建套接字的接…

Eureka 高可用集群搭建实战:服务注册与发现的底层原理与避坑指南

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…

Spring Boot应用开发实战

Spring Boot应用开发实战&#xff1a;从零到生产级项目的深度指南 在当今Java生态中&#xff0c;Spring Boot已占据绝对主导地位——据统计&#xff0c;超过75%的新Java项目选择Spring Boot作为开发框架。本文将带您从零开始&#xff0c;深入探索Spring Boot的核心精髓&#xf…

yum更换阿里云的镜像源

步骤 1&#xff1a;备份原有源配置&#xff08;重要&#xff01;&#xff09; sudo mkdir /etc/yum.repos.d/backup sudo mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup/步骤 2&#xff1a;下载阿里云源配置 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https:…

【算法训练营Day06】哈希表part2

文章目录 四数相加赎金信三数之和四数之和 四数相加 题目链接&#xff1a;454. 四数相加 II 这个题注意它只需要给出次数&#xff0c;而不是元组。所以我们可以分治。将前两个数组的加和情况使用map存储起来&#xff0c;再将后两个数组的加和情况使用map存储起来&#xff0c;ke…

JS手写代码篇---手写apply方法

11、手写apply方法 apply方法的作用&#xff1a; apply 是一个函数的方法&#xff0c;它允许你调用一个函数&#xff0c;同时将函数的 this 值设置为指定的值&#xff0c;并将函数的参数作为数组&#xff08;或类数组对象&#xff09;传递给该函数。 与call的区别&#xff1…

幂等性:保障系统稳定的关键设计

幂等性&#xff08;Idempotence&#xff09; 是计算机科学和分布式系统中的核心概念&#xff0c;指同一操作重复执行多次所产生的效果与执行一次的效果相同。这一特性对系统容错性、数据一致性至关重要&#xff0c;尤其在网络通信&#xff08;如HTTP&#xff09;和数据库设计中…

electron定时任务,打印内存占用情况

// 监听更新 function winUpdate(){// 每次执行完后重新设置定时器try {// 获取当前时间并格式化为易读的字符串const now new Date();const timeString now.toLocaleString();console.log(当前时间: ${timeString});// 记录内存使用情况&#xff08;可选&#xff09;const m…

华为手机开机卡在Huawei界面不动怎么办?

遇到华为手机卡在启动界面&#xff08;如HUAWEI Logo界面&#xff09;的情况&#xff0c;可依次尝试以下解决方案&#xff0c;按操作复杂度和风险由低到高排序&#xff1a; &#x1f527; 一、强制重启&#xff08;优先尝试&#xff09; 1.通用方法‌ 长按 ‌电源键 音量下键‌…

Python爬虫之数据提取

本章节主要会去学习在爬虫中的如何去解析数据的方法&#xff0c;要学习的内容有&#xff1a; 响应数据的分类结构化数据如何提取非结构化数据如何提取正则表达式的语法以及使用jsonpath解析嵌套层次比较复杂的json数据XPath语法在Python代码中借助lxml模块使用XPath语法提取非…

并行智算MaaS云平台:打造你的专属AI助手,开启智能生活新纪元

目录 引言&#xff1a;AI助手&#xff0c;未来生活的必备伙伴 并行智算云&#xff1a;大模型API的卓越平台 实战指南&#xff1a;调用并行智算云API打造个人AI助手 3.1 准备工作 3.2 API调用示例 3.3 本地智能AI系统搭建 3.4 高级功能实现 并行智算云的优势 4.1 性能卓越…