UART在Linux内核启动时突然不打印的问题

国庆前一天收到的任务,在一颗比较成熟的芯片的SDK基础上,移植一个新内核,让它能够在bitfile下跑在FPGA上。
看了芯片设计那边给的文档,对比过去的那颗,感觉也就改改寄存器,中断号,时钟,内存布局,这活儿也就搞完了,两天解决。
谁曾想一搞就是十天[em]e105[/em]

最气人的是第二天就已经进内核了,串口打印停在busybox,init进程被唤起之前的位置,一度以为是文件系统打包的问题,学了一波buildroot打包方式,追内核解包代码。。。途中,还替换了原先rootfs的打包方法,效果是一致的,串口停在同一个位置。无奈,就开始在最后一行log附近,加打印,最后发现内核start_kernel都跑完了,init也被do_exec了,返回值还是正确的,真邪乎!

串口不打印了,有可能是串口本身有问题,或是init进程运行失败了,也有可能二者叠加。设计给的bitfile也只引出一个串口,这怎么调试?

我开始对我新拉的分支上的代码不信任了,找出过去能在evb上正常跑的代码,在此基础上做最小修改让它在FPGA上能跑起来,结果是这两套内核对齐到最后只有串口时钟源不一致(FPGA固定20M),其他配置都一致,在FPGA上依然卡主。

这么一对比,感觉FPGA上串口有问题啊,可我没有证据!无非就是基地址,中断号,时钟这仨有一个出错了。

基地址不用看,因为内核早期启动打印正常,但是它不用中断,所以感觉中断号有问题,去看手册吧,核实了我设备树配置得一样。时钟如果有问题,也只是乱码而已,不会停住不输出。

到这里怀疑范围可以进一步缩小了,最有可能的依然是中断,遂换个思路,改evb代码,故意改错他注册的中断号,跑起来后发现效果和FPGA一致,停在了同一个地方!!!

这时我就开始想怼设计,拉着他看现象了,后来静下来一想,我证据还是不足啊:busybox里还会进一步对串口进行配置,做重定向,是不是我busybox得问题呢?我在看了一眼busybox代码,头疼。。。一想到又要在它里边儿加打印,追执行路径,重新编译。。。
算了,换个方法,能否直接沿用早期的bootconsole?不在启动时把它关闭?似乎只要在设备树里不去加串口的设备节点就好了(听说),后来证明不行,我也是后来才知道除了删掉节点还要改一个flag,否则依然会用启动后期新注册的串口。

怀疑中断问题,但不好调试证明,此时我已经开始请救兵了,大佬推荐我在串口的中断处理函数里加gloabl cnt,在System.map找到这个全局变量地址,Attach仿真器上去看这个地址上的值(仿真器加符号表加调用堆栈,无敌的调试方式)

结果证明串口的中断就是没有进,但此时我依然坚信串口中断号配置是对的,因为我的同事已经做过裸区验证,串口的中断收发是pass的,同一个bitfile,同一个中断号,没理由是效果不同。(很矛盾)

为了证明串口是错误的,我开始修改串口驱动,中断模式改为poll模式,再启动,发现FPGA上也可以跑的更远了,这次跑到了inittab里(排除了init进程调用失败),停在了配置getty与console绑定的这一行(也是通过在rcS里加打印)来确认了。还是停住了,依然没进login,很苦恼,临门一脚了。我已经没有路数了。

后来还是一个同事提醒我,你都能在rcS加打印了,你为什么不多加点,cat 一下内核中断计数啊?
好吧,追了这么多天,脑子糊涂了。如下图,加入了getty权限显示,tty绑定关系显示,中断号显示。可以看到ttyS0也就是我的UART0上是没有计数的,与此同时arch timer居然也没有计数,6啊这玩意都没有计数那指定是有问题了,还是它们老大的问题,GIC控制器。

先看下evb和fpga的差异,我先dump了EVB板子上的GIC控制器所有寄存器,然后用仿真器dump我卡死的FPGA Linux的GIC控制器,然后dump裸驱工程执行时GIC的寄存器。(dump这仨用的是同一个基地址,因为设计给的手册上市同一个值)
我发现evb上gic配置正确,但是后两者dump出来都是0!!。fpga linux的gic没配置我能理解,它中断没计数嘛。裸驱工程怎么也没配置,它串口的中断模式不是验证了吗?保持怀疑,自己找个工程跑一次case,结果确实市通的。说实在的,我还没看过裸驱里怎么配置的GIC,那就跟一下它的代码,我发现它是通过汇编配置的,虽然代码里用宏定义配置了它的基地址,但是没人引用这个宏,且它的基地址是从CP15协处理器读出来的!!!我用仿真器读图二的r0寄存器,好家伙,地址是一个陌生的值 0xf0611000。
我囿于串口,init进程,rootfs近十天,在他们仨之间打转,这个陌生的值鬼使神差得推着我将它填入Linux的设备树(图三),编译过程中就想着了这次绝对能过。
效果如图四。爽了。
最后还留了一个问题,为啥poll模式进不到login位置,中断模式可以?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IPV6学习汇总

一、ICMPV6 ICMPv6(Internet Control Message Protocol version 6),即互联网控制信息协议版本六,是为了与IPv6配套使用而开发的互联网控制信息协议。以下是关于ICMPv6的详细介绍: 一、基本功能 ICMPv6向源节点报告关…

讯方·智汇云校华为ICT大赛赛前辅导直播安排

华为ICT大赛赛前辅导直播安排 网络赛道在“智汇云校”视频号上观看。 直播时间: 网络:2024.10.14-10.15-10.17-10.18-10.21-10.23-10.25-10.28-10.29-10.30-11.1-11.4-11.5-11.6,每晚19:30-22:00 安全:2024…

STM32CubeIDE使用ADC采用DMA重大BUG

问题描述 STM32CubeIDE 1.8.0问题 大牛攻城狮最近调试STM32L151CBT6。由于项目上使用该款芯片做控制电源使用,其中涉及到多路ADC的数据采样。使用STM32CubeIDE 1.8.0版本详细如下图所示 这里大概率是STM32CubeMX版本太低了,从图上看才是6.4.0 注意这里…

服务器数据恢复—Raid5阵列硬盘磁头损坏导致掉线的数据恢复案例

服务器数据恢复环境: 一台某品牌存储设备上有一组由10块硬盘(9块数据盘1块热备盘)组建的raid5阵列,上层部署vmware exsi虚拟化平台。 服务器故障: raid5阵列中两块硬盘对应的指示灯亮黄灯掉线。硬盘序列号无法读取&am…

Java学习-JVM

目录 1. 基本常识 1.1 JVM是什么 1.2 JVM架构图 1.3 Java技术体系 1.4 Java与JVM的关系 2. 类加载系统 2.1 类加载器种类 2.2 执行顺序 2.3 类加载四个时机 2.4 生命周期 2.5 类加载途径 2.6 双亲委派模型 3. 运行时数据区 3.1 运行时数据区构成 3.2 堆 3.3 栈…

特斯拉全新发布会上,无人驾驶汽车亮相,机器人与用户近距离互动

在科技日新月异的今天,特斯拉再次以其前瞻性的技术和创新理念引领了行业的潮流。近日,特斯拉在美国加利福尼亚州伯班克华纳兄弟工作室召开了一场主题为“WE ROBOT”的新品发布会,会上不仅发布了无人驾驶汽车,还展示了特斯拉人形机…

CVE-2022-26965靶机渗透

​ 开启环境 ​ ​ 进入环境 ​ ​ 使用弱口令admin登录 ​ ​ 利用cms主题构造木马 ​ 需要将主题中的info.php文件修改,再打包成zip再上传,通过网络搜索找到Github中的Pluck CMS,进入后随便下载任一主题 https://github.com/sear…

python之selenium接管打开的谷歌浏览器窗口——隐藏爬虫特征,跳过登陆弹窗验证

文章目录 引言使用selenium接管打开的谷歌浏览器总结 引言 我们知道通过selenium打开的浏览器与本地电脑上打开的浏览器是不同的,selenium通过插件打开浏览器页面会显示爬虫特征信息,且在访问某些网站时,很容易被检测出是一个爬虫机器&#x…

PostgreSQL学习笔记七:常规SQL操作

PostgreSQL 支持标准的 SQL 语句,同时也扩展了一些特有的功能。以下是一些常规的 SQL 语句示例,这些示例涵盖了数据定义、数据操作和数据查询的基本操作: 数据定义语言 (DDL 创建数据库: CREATE DATABASE mydatabase;创建表&#…

为什么要选择高权重媒体?高权重媒体发稿优点有哪些,媒介盒子分享

在品牌传播与市场推广的领域中,选择高媒体权重进行发稿已成为众多企业的共识。高媒体权重不仅代表了媒体的影响力、权威性和传播效果,更是企业实现精准品牌曝光、提升品牌形象和市场竞争力的重要工具。下面,我们将深入探讨为何要选择高媒体权…

【 香格里拉酒店-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

国家基本药物目录数据库查询3种方法(2018、2012、2009年版)

国家基本药物目录是一份由国家卫生健康委员会等相关部门制定的药品清单,旨在满足国家公共卫生需求,保障基本医疗服务。该目录包括了多种药品,覆盖了不同的疾病治疗领域,如抗生素、心血管药物、神经系统药物、抗肿瘤药物、维生素和…

Video-LLaMA部署

Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding

如何设计销售人员的薪酬结构?

如何设计销售人员的薪酬结构? 在构建组织薪酬体系的过程中,薪酬结构设计占据核心地位,其复杂性不容小觑。学者普遍认为,薪酬结构反映了薪酬体系中各组成要素的分配比例,其设计需综合考量企业特性、发展阶段、员工特质…

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步,VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件,摄影师能够创作出沉浸式的360度全景作品,为观众提供身临其境的视觉体验。在这篇文章中,我们将介绍VR全景摄影的相关…

9月丨创客匠人-IP书院月报附10月活动预告

创客匠人9月部分发售成果展示!带客户拿结果,我们是真干,真出结果!每个月都有新的百万案例! 9月活动回顾: 9月2日I创客发售联盟私教班第二期正式开班《开营第一讲》 9月12日|媛姐连麦巨龙光学董事长董赣明…

借助 Aspose.Words控件,在 Word 中添加目录 (TOC)

考虑一个不包含目录的大型文档。读者必须连续滚动很长时间,从而花费大量时间来寻找所需的信息。目录 (TOC) 可以立即解决此问题,因为它清楚地显示了文档的结构和导航的可能性。在这篇文章中,我们将向您展示如何在 Word 文档中添加目录。 Asp…

【HTML并不简单】笔记4-你不知道的details、dialog和popover元素

文章目录 自带交互的details元素自定义样式案例全新name属性 dialog元素form元素与对话框自动关闭关闭来源的判断自动聚焦特性showModal()方法与真正的对话框焦点隔离特性顶层特性自动层级特性 原生弹层与popover属性 《HTML并不简单:Web前端开发精进秘籍》张鑫旭 笔…

C语言 ——— oj题:搜索插入位置

目录 题目要求 代码实现 题目要求 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置 请必须使用时间复杂度为 O(long n) 的算法 示例 1: 输入: nums [1,3,5,6], t…

Nature 正刊丨生物分子冷凝物介导内体膜的弯曲和断裂

01摘要 多囊体是通过降解膜结合的货物蛋白1,2,3参与细胞质量控制的关键内体隔室。消耗ATP的ESCRT蛋白机制通过多泡体膜的内陷和断裂形成管腔内囊泡,介导膜结合货物蛋白的捕获和吞噬4,5。在这里,我们报告说,植物ESCRT组分FREE16形成与膜结合的…