![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
uboot
fsczp
这个作者很懒,什么都没留下…
展开
-
如何通过链表来管理驱动的?
参考资料链接: Linux双向循环链表的实现.链接: 双向链表与循环链表.下面的图是mmc设备的驱动分析与链表相关的文件在list.h头文件里面有定义关于list_add_tail之前是不懂的,总觉得新的结点是放在了一个很奇怪的位置,或者说是头结点的前面。后来上网查询得知链表是可以循环的,放在头结点的左边相当于加到了最后面了,具体分析可以看参考资料的文章,写的非常好。关于网卡驱动中间通过for循环去遍历整个eth_devices链表,找到最后一个节点之后,就把新的设备插入到最后的位置。原创 2020-06-04 16:13:30 · 171 阅读 · 0 评论 -
汇编里面的.word代表什么
在学习uboot的时候经常在start.S头文件前面看到:.word 0x2000.word 0x0.word 0x0.word 0x0课程解释说是占位用的,是uboot前面的16个字节的header.word代表是字,一个字长。字长与处理器的位数有关,比如16位处理器,字长为2Byte:同理,arm的32位处理器字长为4字节。.word是怎么排布的?.word 0x2000.word 0x1234.word 0x5678.word 0x9abc用winhex把编译后的ub原创 2020-05-25 16:48:44 · 5338 阅读 · 0 评论 -
DM9000网卡驱动移植学习记录
笔记记录:网卡也是总线式访问,直接连接到Soc上面的SROM(SRAM/ROM)-是一个总称,是SRAM或者ROMSOC的SROM Controller提供对外总线式连接的SRAM/ROM接口网卡接到了SROM中就好像一个储存芯片一样扩展到了SOC的地址空间,主机可以通过一个地址来访问网卡内部的寄存器。网线:网线有8根,4根数据线(两发两收)、4根地线(抗干扰用)发 T+ / T-收 R+ /R-即传输的是差分信号。CS引脚很多芯片有片选引脚CS。主机向CS发送有效信号,从机工作主原创 2020-05-24 15:28:27 · 392 阅读 · 0 评论 -
uboot的虚拟地址映射学习
虽然不确定对错,但是也算是一种思考,先记录下来这个截图是课程讲到虚拟地址映射的时候课件里面给的。我之所以有疑问的原因是在课程2.10.1.2里面讲到了这样一句话(2)uboot早期也是纯物理地址工作的,但是现在的uboot开启了MMU做了虚拟地址映射,这个东西驱动也必须考虑。查uboot中的虚拟地址映射表,发现除了0x30000000-0x3FFFFFFF映射到了0xC0000000-0xCFFFFFFF之外,其余的虚拟地址空间全是原样映射的。而我们驱动中主要是操控硬件寄存器,而S5PV210的S原创 2020-05-17 14:32:17 · 1024 阅读 · 0 评论 -
uboot环境变量学习-getenv
getenv并不是一个给用户操作的命令,而是在uboot里面被调用的一个跟环境变量相关的函数。相关的代码经过前面学习过了printenv和setenv,对这个字符串解析的方法已经很熟悉了,如果到时候忘了的话可以先看看前面的分析思路再回来这里看。getenv函数大概思路就是通过遍历default_environment[]数组,找到了这个环境变量之后,返回这个环境变量的第一个字符的地址,可以看到最后的一句return ((char *)env_get_addr(val));返回的就是一个指针,原创 2020-05-16 15:18:10 · 1625 阅读 · 0 评论 -
uboot环境变量saveenv学习
命令操作的简单回顾:当设置完环境变量之后,如果执行了saveenv的话,则下次重新运行的时候环境变量则会被保存为上次保存的值,如果不保存,只会在设置好时还没重启之前生效,重启之后设置值会恢复成原来的值。执行save/saveenv之后会出现(对于我这块开发板)Saving Environment to SMDK bootable device…从代码开始分析为什么是 SMDK bootable device?同样,通过U_BOOT_CMD这个宏,通过函数指针的方法,去执行do_saveenv函数原创 2020-05-16 14:44:58 · 4925 阅读 · 0 评论 -
uboot环境变量setenv学习
setenv是操作uboot中环境变量的一个命令命令操作的简单回顾:新建一个环境变量命令行:set newenv 1结果: newenv=1删掉一个环境变量命令行:set newenv结果:这个命令就没了,printenv也不会出现。从代码开始分析:路径跟printenv一样在uboot/common/cmd_nve.c在之前的一篇忘记了,这些命令的执行都是通过U_BOOT_CMD去执行这些命令。在setenv对应的U_BOOT_CMD中是通过调用do_setenv函数来执行命令原创 2020-05-15 20:01:17 · 6318 阅读 · 0 评论 -
uboot环境变量do_printenv-字符串解析学习
通过学习do_printenv这个函数,去学习内里的字符串解析方法。第一步,研究do_printenv要知道uboot中的环境变量是怎样存储的。在do_printenv里会调用到env_get_char函数,返回值是unsigned char类型的。通过env_get_char函数可以获得一个字符。从哪里获得呢?从default_environment[ ]这个数组获得。这个数组里面的元素排列都是紧密排列的,用\0隔开、就是这样排列的。相当于这样char buf[ ] = {“abc”原创 2020-05-15 01:07:53 · 594 阅读 · 0 评论 -
uboot命令体系学习记录
文章目录说在前面main_looprun_command命令解析-parse_line函数说在前面uboot的命令体系在平时移植过程中基本不用动因为基本都是写好的代码,不用动态添加删减。学习的目的是了解原理,学习个中的方法学习命令处理的方式。1.命令解析2.命令查找3.命令执行main_loop一、uboot最的最后是在一个由for循环构成的死循环里面执行main_loop() -----------------------main_loop在common/main.c里面二、进入原创 2020-05-13 12:10:30 · 258 阅读 · 0 评论