当前位置: 首页 > news >正文

北京医疗网站建设公司搜索引擎优化的英语简称

北京医疗网站建设公司,搜索引擎优化的英语简称,丽水微信网站建设报价,自创品牌策划方案范文一、uboot 命令体系基础 1、使用 uboot 命令 (1) uboot 启动后进入命令行环境下,在此输入命令按回车结束,uboot 会收取这个命令然后解析,然后执行。 2、uboot 命令体系实现代码在哪里 (1) uboot 命令体系的实现代码在 uboot/common/cmd_xx…

一、uboot 命令体系基础

1、使用 uboot 命令

(1) uboot 启动后进入命令行环境下,在此输入命令按回车结束,uboot 会收取这个命令然后解析,然后执行。


2、uboot 命令体系实现代码在哪里

(1) uboot 命令体系的实现代码在 uboot/common/cmd_xxx.c 中。有若干个 .c 文件和命令体系有关。(还有 command.c main.c 也是和命令有关的)

在这里插入图片描述


3、每个命令对应一个函数

(1) 每一个 uboot 的命令背后都对应一个函数。这就是 uboot 实现命令体系的一种思路和方法。

(2) 我们要找到每一个命令背后所对应的那个函数,而且要分析这个函数和这个命令是怎样对应起来的。


4、命令参数以 argc & argv 传给函数

(1) 有些 uboot 的命令还支持传递参数。也就是说命令背后对应的函数接收的参数列表中有 argc 和 argv,然后命令体系会把我们执行命令时的命令+参数(md 30000000 10)以 argc(3)和 argv(argv[0]=md, argv[1]=30000000 argv[2]=10)的方式传递给执行命令的函数。

举例分析,以 help 命令为例:
help 命令背后对应的函数名叫:do_help。在 uboot/common/command.c 的236行。int do_help (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])

在这里插入图片描述


二、uboot 命令解析和执行过程分析

1、从 main_loop 说起

(1) uboot 启动的第二阶段,在初始化了所有该初始化的东西后,进入了一个死循环,死循环的循环体就是 main_loop。

(2) main_loop 函数执行一遍,就是一个获取命令、解析命令、执行命令的过程。

(3) run_command 函数就是用来执行命令的函数。

在这里插入图片描述


2、run_command 函数关键点分析

(1) 控制台命令获取;

(2) 命令解析。parse_line 函数把 “md 30000000 10” 解析成 argv[0]=md, argv[1]=30000000 argv[2]=10;

在这里插入图片描述


(3) 在命令集中去查找命令。find_cmd(argv[0]) 函数去 uboot 的命令集合当中搜索有没有 argv[0] 这个命令。
在这里插入图片描述


(4) 执行命令。最后用函数指针的方式调用执行了对应函数。

在这里插入图片描述

思考:关键点就在于 find_cmd 函数如何查找到这个命令是不是 uboot 的合法支持的命令?这取决于 uboot 的命令体系机制(uboot 是如何完成命令的这一套设计的,命令如何去注册、存储、管理、索引。)。


三、uboot如何处理命令集1

1、可能的管理方式

(1) 数组。结构体数组,数组中每一个结构体成员就是一个命令的所有信息。

(2) 链表。链表的每个节点 data 段就是一个命令结构体,所有的命令都放在一条链表上。这样就解决了数组方式的不灵活。坏处是需要额外的内存开销,然后各种算法(遍历、插入、删除等)需要一定复杂度的代码执行。

(3) 有第三种吗?uboot 没有使用数组或者链表,而是使用了一种新的方式来实现这个功能。


2、命令结构体 cmd_tbl_t

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

(1) name:命令名称,字符串格式。

(2) maxargs:命令最多可以接收多少个参数。

(3) repeatable:指示这个命令是否可重复执行。重复执行是 uboot 命令行的一种工作机制,就是直接按回车则执行上一条执行的命令。

(4) cmd:函数指针,命令对应的函数的函数指针,将来执行这个命令的函数时,使用这个函数指针来调用。

(5) usage:命令的短帮助信息。对命令的简单描述。

(6) help:命令的长帮助信息。细节的帮助信息。

(7) complete:函数指针,指向这个命令的自动补全的函数。


总结:uboot 的命令体系在工作时,一个命令对应一个 cmd_tbl_t 结构体的一个实例,然后 uboot 支持多少个命令,就需要多少个结构体实例。uboot 的命令体系把这些结构体实例管理起来,当用户输入了一个命令时,uboot 会去这些结构体实例中查找(查找方法和存储管理的方法有关)。如果找到则执行命令,如果未找到则提示命令未知。


3、uboot 实现命令管理的思路

在这里插入图片描述

在这里插入图片描述

(1) 填充 1 个结构体实例构成一个命令

(2) 给命令结构体实例附加特定段属性(用户自定义段),链接时将带有该段属性的内容链接在一起排列(挨着的,不会夹杂其他东西,也不会丢掉一个带有这种段属性的,但是顺序是乱序的)。

(3) uboot 重定位时,将该段整体加载到 DDR 中。加载到 DDR 中的 uboot 镜像中,带有特定段属性的这一段,其实就是命令结构体的集合,有点像一个命令结构体数组。

(4) 段起始地址和结束地址(链接地址、定义在 u-boot.lds 中)决定了这些命令集的开始和结束地址。

在这里插入图片描述

在这里插入图片描述


四、uboot 如何处理命令集2

1、uboot 命令定义具体实现分析

(1) U_BOOT_CMD 宏基本分析

在这里插入图片描述

这个宏定义在 uboot/include/command.h 中。

U_BOOT_CMD(
version, 1, 1, do_version,
“version - print monitor version\n”,
NULL
);

这个宏替换后变成:

cmd_tbl_t __u_boot_cmd_version attribute ((unused,section (“.u_boot_cmd”))) = {#name, maxargs, rep, cmd, usage, help}

在这里插入图片描述

总结:这个 U_BOOT_CMD 宏的理解,关键在于结构体变量的名字和段属性。名字使用 ## 作为连字符,附加了用户自定义段属性,以保证链接时将这些数据结构链接在一起排布。

(2) 链接脚本。


2、find_cmd 函数详解

在这里插入图片描述

(1) find_cmd 函数的任务,是从当前 uboot 的命令集中查找是否有某个命令。如果找到则返回这个命令结构体的指针,如果未找到返回 NULL。

(2) 函数的实现思路很简单,如果不考虑命令带点的情况(md.b md.w 这种)就更简单了。查找命令的思路其实就是 for 循环遍历数组的思路,不同的是数组的起始地址和结束地址是用地址值来给定的,数组中的元素个数是结构体变量类型。

在这里插入图片描述


3、U_BOOT_CMD 宏详解

(1) 这个宏其实就是定义了一个命令对应的结构体变量,这个变量名和宏的第一个参数有关;因此只要宏调用时,传参的第一个参数不同,则定义的结构体变量不会重名。


4、命令举例:version 命令

在这里插入图片描述


五、uboot 中增加自定义命令

1、在已有的 c 文件中直接添加命令

(1) 在uboot/common/command.c中添加一个命令,叫:mycmd。

(2) 在已有的.c文件中添加命令比较简单,直接使用U_BOOT_CMD宏即可添加命令,给命令提供一个do_xxx的对应的函数这个命令就齐活了。

(3) 添加完成后要重新编译工程(make distclean; make x210_sd_config; make),然后烧录新的uboot去运行即可体验新命令。

(4)还可以在函数中使用argc和argv来验证传参。


2、自建一个 c 文件并添加命令

(1) 在uboot/common目录下新建一个命令文件,叫cmd_aston.c(对应的命令名就叫aston,对应的函数就叫do_aston函数),然后在c文件中添加命令对应的U_BOOT_CMD宏和函数。注意头文件包含不要漏掉。

(2) 在uboot/common/Makefile中添加上aston.o,目的是让Make在编译时能否把cmd_aston.c编译链接进去。

(3) 重新编译烧录。重新编译步骤是:make distclean; make x210_sd_config; make


3、体会:uboot 命令体系的优点

(1) uboot的命令体系本身稍微复杂,但是他写好之后就不用动了。我们后面在移植uboot时也不会去动uboot的命令体系。我们最多就是向uboot中去添加命令,就像本节课所做的这样。

(2) 向uboot中添加命令非常简单。


源自朱友鹏老师.

http://www.mnyf.cn/news/36084.html

相关文章:

  • 山东网站营销优化开发搜索引擎营销优化
  • 网站建设企业邮箱制作网站网络营销和网络推广
  • 页游平台网站网站推广的技术有哪些
  • 洛阳建网站公司汕头网站排名优化
  • dreamwearver做网站地图百度收录网站链接入口
  • html做的网站排版错误苏州网站建设书生商友
  • 旅游网站的设计方案怎么做搜索广告优化
  • 天津企业网站建设交换友链平台
  • 手机网站制作案例百度秒收录蜘蛛池
  • 新闻网站建设管理制度windows优化大师是官方的吗
  • 怎么做网站访问统计二次感染即将大爆发
  • 网站开发合同审核要点企业网站建设方案范文
  • 如何做自己网站平台电脑培训学校课程
  • 如何创建一个自己公司网站百度关键词优化公司
  • 阿里云网站的网页怎么做南昌seo排名外包
  • 宁夏做网站公司网站推广app下载
  • 动态网站开发教案站长工具高清
  • 免费网站建设排行榜互联网营销方法有哪些
  • 网站首页图片做多大视频推广平台
  • 网站框架建设企业查询免费
  • 中投中原建设有限公司官方网站百度网盟推广官方网站
  • 奉贤网站建设专家网络优化论文
  • 如何做网站认证免费域名注册查询
  • 什么网站可以做字体效果好深圳百度seo代理
  • 企业网站的建立不能缺少哪些细节小红书广告投放平台
  • 政府网站建设园林绿化推广引流平台
  • 益阳做网站h5下一页
  • 网站做网络营销的效果seo查询
  • 网站建立健全举报工作机制html友情链接代码
  • 网站推广运营公司打开百度官网