最近一段时间主要是搞内核,当然,也要和其它部门扯皮。
这还是我第一次在实际工作是移植内核,以前那些,只能算是学习、积累。这里记一下移植过程的一些经验。

一、管脚复用
之前我只移植过S4C2440平台的内核,该芯片datasheet不多,一个文档搞定,不像我现在用的芯片,有N个文档要看,而且有N个核。像GPIO的配置,也比2440复杂得多。在管脚复用上,我掉进过2个坑里。
我们统一在u-boot里做管脚复用,在仔细对着硬件平台的原理图的GPIO后,确认没搞错。不过还是出问题。
一个是RS485,都知道它是半双工的,在收、发之前要做方向的配置,这个配置就是一个GPIO的电平的配置。不过测试时发现,只能发,不能收,拿示波器来看,发现那个GPIO无论设置为0还是1(已确认能设置0或1),一直是高电平,——感觉上,这个GPIO无法操作。幸亏学习了sysfs,将寄存器的读写操作做成/sys/下的一个文件(前面写有sysfs的驱动内核的文章),使用echo来查看该GPIO管脚复用寄存器,发现值不是我们期望设置的,它改变了,复用成其它的功能了,不管三七二十一,先强制设置成是GPIO功能,结果可以接收数据,能肯定是复用的问题。u-boot没错,就是内核有问题,于是便去查,发现内核在某个地方也做了管脚复用的配置,对着手册看,配置的值果然是我们看的值。继续探索,发现是内核配置选项中开了管脚复用的宏,去掉该配置就可以了。
另一个坑隐藏得比较深,因为涉及到另外的一个核上的代码。当我测试与linux有关的外设时,一切都正常,比如,led能点亮。但我运行其它核的程序时,led灭了。使用上述方法查找,发现是管脚复寄存器值改变了。这个问题在项目例会上提出,然后时时被领导问进展(也不是那么频繁,比如一天问两次这样吧)。在不到48小时内(周三10时开会,周四晚上19点多解决),终于找到出现问题的函数并解决,这还是一个同事帮忙找到的。花费时间最多的是定位在哪个地方将寄存器值改变了。一来,涉及了三个核的程序运行,二来,代码太庞大,我又不熟悉(熟悉代码的人在做其它紧急的事)。
开始怀疑的时候,我在整个代码树搜索寄存值的地址,包括基地址。使用管脚复用基地址找不到是因为那个函数的管脚复用基地址是用另一个基地址做偏移算出来的,所以,不能直接找出来。我没有考虑到搜索改变后的寄存器的那个数值,因为给寄存器赋值不会直接把所有的位都写成一个数,这是我的经验,——但那个函数是这样做,它赋的值就是我看到的值。我也没考虑搜索各个寄存器地址的偏移量,这是我的疏忽之处。之所以说那么多,是为自己找借口:不是我没有从这个方向查找,是查找方法不当。
再说回那个函数的用途,它是EVM板的一种用法,在人家的EVM板上,那些管脚就是这么配置的,没问题,问题是我们参考人家时,把那些管脚做别的用途。从这个角度看,有时候,直接拿人家的东西未必是好的。不过现在的开发,一般不会自己从头设计,比如我之前的ARM开发板,就是那个公司从三星的参考设计上开发的。如果有个强大的技术支持,应该会好很多。在与同事聊天时,聊到某家很牛的公司买某平台芯片提供商很多芯片,芯片提供商直接派人到该公司做支持。

二、rtc晶振
某天无意中发现设备上的时间会慢慢变慢。一天有半个小时的误差。于是上网找资料,找到内核的HZ配置,时钟中断,rtc同步等等很多资料,但好像没什么联系。只好求助硬件部门帮查找。首先硬件电路设计与我们参考的那个板子相同,芯片也相同,内核也相同,按理应该是没有问题的。在人家板子上也未发现问题,时间很准。最后硬件部门出动了频率计数器,发现rtc的晶振不是外部的32.768KHz,而是32KHz左右,查看芯片手册,里面说可以配置使用内部的振荡器,也可以配置使用外部的,我们是使用外部的晶振,但为何不生效?继续看手册,发现有一个寄存器的位是做这个配置的:
Internal 32-kHz clock source control bit (EEPROM bit):
when 0, the internal 32-kHz clock source is the crystal oscillator or an
external 32-kHz clock in case the crystal oscillator is used in bypass
mode
when 1, the internal 32-kHz clock source is the RC oscillator.

在u-boot读取这个位的值,结果是1,确实是使用了内部的振荡器,将它改成0,时间果然准确了。既然找到问题,就好办了。每次u-boot启动时都是读这个位的值,如果是1,就将它改成0。但是,有一个疑问,为何人家参考设计的板子没设置这个值,也没问题?
cu上也有篇类似的文章,我也是从里面找到一些线索的。
http://blog.chinaunix.net/uid-21501855-id-3320042.html

注1:用人家的东西,坑太多了。
注2:公司对于在用品bug处理比较严格,要求xx天给出临时解决方案,yy天给出永久的解决方案。于是在文中也顺便提了一下我解决小bug所花的小时间。

移植内核过程的几个问题相关推荐

  1. (OK) 编译内核及移植MPTCP过程 - 树莓派 3B - (北邮张成文老师组)本科生 - 杨翔 - 周煊赫 - 研究生 - 黎增城

    http://blog.lecoan.me/2017/08/09/build-rpi-kernel-with-mptcp/ 编译内核及移植MPTCP过程 编译方式 编译内核有两种方式:本地编译和交叉编 ...

  2. s3c2416开发板 linux,S3C2416移植内核Linux3.1的wm9713声卡过程

    移植内核的声卡驱动.原因没有声卡驱动,WM9713声卡驱动移植(原来的内核有UDA1341声卡驱动,我们再次基础上直接修改) 1.直接复制内核得到三个文件:s3c2416_wm9713.c , wm9 ...

  3. android的wifi网卡移植详细过程已经通用驱动的问题

    这里有一篇详细的教程,看完还有一个问题 就是android的wifi驱动移植,如果有wifi网卡的驱动代码,是一定需要对android系统本身的代码修改重写编译吗?就是说,有无可能不改变android ...

  4. UCOS2_STM32移植详细过程(汇总)

    Ⅰ.概述 笔者发现一个问题,很多初学者,甚至很多工作一两年的人,他们有一种依赖的思想,就是希望从别处获取的软件代码不做任何修改,直接可以运行或者使用.笔者想说,实践才是检验真理的关键,实践才是掌握知识 ...

  5. uboot加载linux内核加载那些内容,几个地址参数及uboot加载启动内核过程的理解

    关于uBoot和Linux内核中几个地址参数及uboot加载启动内核过程的理解 uboot一般使用mkimage工具先制作一个启动映象文件来引导识别内核的,uboot源代码的tools/目录下有mki ...

  6. MPU6050的dmp代码移植的过程--转

    让自己别忘了大学里学的东西,那么就把它记录下下来,效率会比忘记然后重新再去找资料再重头学高的多 一开始自己死命的去网上找现成的代码,但是发现大多都是打着dmp的幌子,给的是得出原始数据的代码,或者确实 ...

  7. live555移植ARM过程

    文章目录 前言 一.下载live555 二.构建过程 1.主要的步骤 2.碰到的问题 总结 前言 将live555移植到飞凌OKA40i-C开发板. 开发环境:虚拟机上安装Ubuntu,64位机器. ...

  8. 基于裸机工程移植内核

    基于裸机工程移植内核 在TencentOS Tiny官方项目仓下载内核代码,下载地址: GITHUB:https://github.com/OpenAtomFoundation/TencentOS-t ...

  9. arm linux 移植全部过程

    arm linux 移植全部过程 总述 面向的读者 正文 现代计算机系统的工作模式 BOOT-ROM U-Boot Makfile 总述 之前做过linux在powerpc上的移植,当然过程曲折,内容 ...

最新文章

  1. 连接ORACLE实例
  2. Android自动化测试框架
  3. snappy 在linux安装及使用
  4. MacOS 终于可以完美使用 Podman 了!
  5. java基础学习(二)数组
  6. JSplitPane
  7. “白痴“上帝视角调节反序列化链之CC2
  8. 实现一个正则表达式引擎in Python(二)
  9. ByteBuffer使用之道
  10. C#元组类型System.ValueTuple
  11. [剑指offer][JAVA][面试第40题][最小的k个数][快选][堆][BST]
  12. MVC设计模式-学习笔记
  13. 虚拟机可以识别usb无线网卡,但一直提示设备正在运行中--解决方法
  14. 开源中文关系抽取框架,来自浙大知识引擎实验室
  15. 《嵌入式Linux基础教程》补充阅读建议电子数目下载
  16. SQL注入漏洞的判断
  17. CodeProject SenseAI服务器:AI最简单的方法
  18. pythonQQ机器人系列:使用requests实现QQ机器人聊天(0-2)
  19. 【开源教程5】疯壳·开源编队无人机-飞控固件烧写
  20. 计算机编程vb求最大公约数,VB求最大公约数的两个例子

热门文章

  1. 滴!你的“十三香”已发货,iPhone 13系列今日正式发售
  2. 字节跳动和腾讯不正当竞争案将于深圳开庭 抖音:我们也是看新闻才知道本月24日要开庭...
  3. 滴滴网约车违规出京被罚15万 官方回应:系司乘线下协商
  4. 志高空调,到了最危险的时候!
  5. 中兴通讯助力MTN建设赞比亚南部首个超100G骨干光网络
  6. 高德再回应导航错误致景区严重拥堵 这次复盘了事件原因
  7. 华为Mate 40 Pro概念渲染图曝光:首发屏下摄像头技术?
  8. Surface Book 3现身3DMark:10nm架构升级
  9. 藏的太深!原来支付宝还有另一个“集福”活动
  10. 全球最快65W闪充!OPPO Reno Ace正式发布 高达限量定制版售价仅3599元