首页 > 其他分享 >x210-2023-03-20

x210-2023-03-20

时间:2023-03-20 22:47:13浏览次数:40  
标签:03 头文件 错误 uboot x210 源码 MMC 20 移植

1、先前移植好的uboot由于是从uboot官网下载一步一步改出来的,所以第一个问题会发现无法保存ENV(通过测试setenv和saveenv bootdelay参数即可知道,saveenv失败),另一个问题是没有把DM9000网卡驱动做进去(传输kernel得用tftp服务,后面移植根文件系统大概率需要使用到nfs,用于边改边看挂载点的变化),其余问题像需要修改默认400MHz时钟至1000MHz、没有打印各时钟频率具体信息等,这次针对的是第一个问题,主要完成MMC驱动移植并能实现ENV参数保存(后面移植发现还需要做多一步保存ENV到特定扇区17,这个相对简单不赘述),芯片平台为S5PV210,uboot源码是2012.10版本的,移植用到的源文件譬如mmc.c、s3c_hsmmc.c等取自三星android_uboot_smdkv210.tar.bz2(其实可以直接从三星评估板所用uboot开始而不必从裸uboot开始,但是由于前面学习过程已经从裸uboot开始并得到了半成品所以选择补充未完成功能然后继续使用)。

首先是第一次移植,结果是没有移植成功,总结来看,问题出在,一次把多个移植步骤都做了(因为网上参考的文章大多数是一些网友已经移植过后的总结,所以他们的文章往往会告诉你后续步骤,所以自然而然地多做了),导致出的错误多,并且有些错误属于连环扣,其实可以不用处理,但是必须要找到真正的错误点入手改正,其余相连的错误也能一起消除,但是由于前面提的原因,导致众多错误混杂在一起,可能结果是改不完,或者改的时候发现有些错误就是死胡同(譬如提示有个系统头文件出了错,但是这个头文件明明都没改动过而且是源码本身自带的,怎么可能有错,但编译之后的确就指向这个文件有一堆错误)。

接着是第二次移植,这次的思路是先找出最基本的init入口函数(一般仅由几个函数构成),然后从第一个函数开始找其所在源文件,然后拿过来放到需要被调用的文件同层文件夹中,经过第一次移植的摸索,除了要在配置文件开启或定义宏内容之外,会发现必须要注意到有些源文件会有头文件(有头文件的需要一起配套移植,不过一般需要放到源码包顶层目录底下的include文件夹,而不是放到被调用的文件同层文件夹,查看是否有配套头文件可以在sourceinsight的project file list中看),而有些文件譬如cmd_mcc.c则是没有配套头文件,那么拿过来之后只需要在Makefile中添加好.o依赖确保文件能被编译进工程即可;另外,sourceinsight这次通过relation window查看函数的被调用树依赖变得比较逊色了,因为一个同名内容有很多个文件或板子都包括有(并且sourceinsight中根据提示错误字符串搜索时要注意,还原通配符内容才有可能搜索得到错误的出处,譬如raise:Signal #8 caught就要写成raise:Signal #%d caught才能放进搜索框),而通过ubuntu的uboot源码包grep -nr查找反而更方便,下图是根据cpu_mmc_init()移植完之后的现象。

2、移植完mmc.c后,如下图所示,当然期间也已经处理完了cmd_mmc.c的移植,但是会发现在MMC部分的打印信息多了raise:Signal #8 caught,网上查了基本说是timer或者时钟配置部分的问题(也就是被除数不能为零需要修改timer.c或者可能没有配置成最佳的时钟频率等),改过timer.c发现不行,所以接下来就是配置成1000MHz,看能不能解决问题,但是尝试过移植三星评估板源码包里的system_clock_init,会发现需要删改,因为有一部分内容是相同的只是针对的板子不同而已,而且有些宏需要自己手动展开放到汇编代码里头去,要不然就只能包含所依赖的头文件,但是无论是自动展开还是通过包含头文件的方式都相对麻烦,再一种方式就是用网上整理好的汇编文件,直接.global把标号声明到外部然后调用,但是结果都是到UART和DDR初始化信息打印完就没再继续往下跑。

 3、由于前面尝试无果,所以使用自带的system_clock_init调用,先测试800MHz确实能跑下来,然后改成1000MHz的,但是实际显示现象就是和原来没有变化,所以应该不是时钟问题导致的;再接下来,补充了缺少的MMC相关宏到s5p_goni.h主配置文件,因为一开始追踪代码没查到是哪的问题,后面实在没思路了于是去搜索MMC驱动移植这几个关键字,通过看文章获得的思路提示到其实自己移植过程中有些宏没定义上(恰好移植编译的过程并没有出错提示这方面的信息,所以比较难发现少定义了),譬如USE_MMC0、MMC_MAX_CHANNEL等,添加好以后再编译烧录就得到下图所示。

 4、EXT_CSD问题的解决办法网上有,解决完发现已经可以保存参数了,不过可以看见在没有进行第一次参数保存设置会有一个bad CRC警告,当经过第一次参数保存设置之后这句警告就再没出现了。

 

 

 5、最后,要补充说一些内容,就是解决s3c_hsmmc.c和setup_hsmmc.c移植过程,会发现从三星评估板移植过来的文件用到了一个和现在uboot某个相同名字的头文件,也就是头文件冲突,但是打开发现其实这个头文件hardware.h只是名字相同但存放路径在uboot下并没有,所以只需要在uboot下创建好路径并放进去即可;使用saveenv能保存ENV参数以后需要多尝试几次看是否也能保存。

 

标签:03,头文件,错误,uboot,x210,源码,MMC,20,移植
From: https://www.cnblogs.com/weizhunie/p/17220823.html

相关文章

  • 2023-3-20
    2023-3-20练习题8.72设\[f(x,y)=\frac{1}{1-xy}~~~((x,y)\in[0,1]^2\setminus\{(1,1)\}).\]求证:\(f\)连续但不一致连续\(f(x,y)\)在\([0,1]^2\setminus\{(1,......
  • SpringMVC-lesson01-servlet复习2-2023-03-20
    1、欢迎页设置在web文件夹下新建form.jsp:input的类型是text,名字是:method。一旦输入add或delete提交,就会到HelloServlet进行跳转<%--CreatedbyIntelliJI......
  • 人月神话阅读笔记03
    人月神话阅读笔记031、蛇添足在系统项目开发中,有时会出现蛇添足的现象,比如,过分地修饰某些并不需要如此的部分;而为了避免这一冗余现象,我们可以在开发过程中与结构师提前沟......
  • adb命令启动报错Error: unknown command '-start'怎么办
    大家好,每天记录小问题.水滴石穿.今天介绍一个从0开始启动app应用的app命令adbshellam-start-w-n包名/启动名第一次运行时报错  怎么办呢,这边使用的是雷电......
  • 3.20 做题总结
    AGC019f思考这样一种策略:我们每次选择剩余的多的那个选项,这样最优。这种方法成立的基础是我们的猜测不会对之后的各个题的答案产生影响。于是我们把\(0\)的个数和\(1......
  • s2oj1651 【2022.10.15】灯 (light)
    s2oj1651【2022.10.15】灯(light)link。首先通过经典的点减边容斥将极长连续段转化为求点亮的灯的个数减去相邻两个灯均点亮的对数。点亮的灯的个数是简单的。接下来......
  • P3747 [六省联考 2017] 相逢是问候
    [六省联考2017]相逢是问候P3747[六省联考2017]相逢是问候题目描述Informatikverbindetdichundmich.信息将你我连结。B君希望以维护一个长度为\(n\)的数......
  • 209.长度最小的子数组——学习笔记
    题目:给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其长......
  • 3.20每日总结
      今天学习了2.5h(包括上课1h)。  今天从零开始重新编程,摒弃改模板的习惯,所有代码自己一点一点敲。找模板改这个习惯,使我不能真正的掌握必要的编程知识。今天主要......
  • 外设驱动库开发笔记52:PM3003S激光粉尘仪驱动
      空气质量是现代日常生活中人们所关注的事情,也是生存环境好坏的一种体现。其中粉尘数量监测更是空气质量检测中最常见的对象,在我们的检测设备中也经常会有这种需求。检......