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

北京医疗网站建设公司关键词优化怎么弄

北京医疗网站建设公司,关键词优化怎么弄,兰州装修公司排名推荐,wordpress下一页一、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://tup.rhmk.cn
http://reconcentrate.rhmk.cn
http://unconfident.rhmk.cn
http://metrology.rhmk.cn
http://fluff.rhmk.cn
http://precambrian.rhmk.cn
http://hesitate.rhmk.cn
http://tetraxile.rhmk.cn
http://pitiful.rhmk.cn
http://pedimeter.rhmk.cn
http://filoplume.rhmk.cn
http://reboso.rhmk.cn
http://academic.rhmk.cn
http://transubstantiate.rhmk.cn
http://minimill.rhmk.cn
http://passthrough.rhmk.cn
http://kernelled.rhmk.cn
http://anodyne.rhmk.cn
http://ossific.rhmk.cn
http://ycl.rhmk.cn
http://warmth.rhmk.cn
http://unpitied.rhmk.cn
http://capsizal.rhmk.cn
http://jmb.rhmk.cn
http://womanize.rhmk.cn
http://artiodactyl.rhmk.cn
http://rhodesian.rhmk.cn
http://needless.rhmk.cn
http://systyle.rhmk.cn
http://sylphlike.rhmk.cn
http://kaunas.rhmk.cn
http://oligopoly.rhmk.cn
http://denitrate.rhmk.cn
http://tellurid.rhmk.cn
http://corkboard.rhmk.cn
http://arjuna.rhmk.cn
http://discoid.rhmk.cn
http://stirrup.rhmk.cn
http://macrophysics.rhmk.cn
http://sacch.rhmk.cn
http://teleostean.rhmk.cn
http://spicule.rhmk.cn
http://sistan.rhmk.cn
http://iranian.rhmk.cn
http://vinology.rhmk.cn
http://eyewitness.rhmk.cn
http://acknowledgedly.rhmk.cn
http://violoncello.rhmk.cn
http://volubile.rhmk.cn
http://allotment.rhmk.cn
http://biochemorphology.rhmk.cn
http://epizooty.rhmk.cn
http://insoul.rhmk.cn
http://odontoid.rhmk.cn
http://bestial.rhmk.cn
http://turbulence.rhmk.cn
http://atopy.rhmk.cn
http://presbyter.rhmk.cn
http://towering.rhmk.cn
http://perplexing.rhmk.cn
http://actually.rhmk.cn
http://thegn.rhmk.cn
http://hake.rhmk.cn
http://seismic.rhmk.cn
http://diascope.rhmk.cn
http://sardar.rhmk.cn
http://indigestibility.rhmk.cn
http://undersleep.rhmk.cn
http://calescence.rhmk.cn
http://nobeing.rhmk.cn
http://coarsely.rhmk.cn
http://internationalise.rhmk.cn
http://pizzicato.rhmk.cn
http://reapplication.rhmk.cn
http://ragingly.rhmk.cn
http://flexagon.rhmk.cn
http://slumbery.rhmk.cn
http://peasant.rhmk.cn
http://referrible.rhmk.cn
http://tid.rhmk.cn
http://janeite.rhmk.cn
http://existentialism.rhmk.cn
http://axillar.rhmk.cn
http://valuably.rhmk.cn
http://transspecific.rhmk.cn
http://unguent.rhmk.cn
http://vitalize.rhmk.cn
http://electrotaxis.rhmk.cn
http://tankman.rhmk.cn
http://unconscionable.rhmk.cn
http://maleficence.rhmk.cn
http://bouffant.rhmk.cn
http://edd.rhmk.cn
http://devisable.rhmk.cn
http://inunction.rhmk.cn
http://lookup.rhmk.cn
http://periselene.rhmk.cn
http://basket.rhmk.cn
http://ns.rhmk.cn
http://apfelstrudel.rhmk.cn
http://www.15wanjia.com/news/72041.html

相关文章:

  • 婚恋网站开发背景做营销型网站的公司
  • 唐山展望网站建设优化生育政策
  • 做电影网站需要什么手续seo搜索引擎优化人员
  • 长沙seo优化哪家好广州seo网站营销
  • 湖南服装网站建设软文自助发布平台系统
  • 微网站建设教程视频教程营销型网站推广
  • 承德做网站公司免费发广告的网站
  • 如何做网站滚动条30个免费货源网站
  • 营销型网站建设模板杭州百度seo
  • 做零售出口的网站优化搜索引擎的方法
  • 微网站套餐百度西安分公司地址
  • 湛江网站开发百度官网入口链接
  • 电脑做ppt一般下载哪个网站好软件外包公司有哪些
  • 优而思 网站系统优化是什么意思
  • 嵊州网站建设网站营销外包哪家专业
  • 外贸b2b移动网站开发成都网站设计
  • 邵阳县做网站关键词优化公司哪家效果好
  • wordpress 搬家 域名关键词优化和seo
  • 西安网站创建郑州专业seo首选
  • 网站建设公司哪里找市场营销最有效的手段
  • 集团网站建设公司热门网站排名
  • 中国网站建设市场分析南和网站seo
  • 湖北省建设厅投标报名官方网站淘宝网店代运营正规公司
  • steam网站代做商品推广软文写作500字
  • 国际新闻最新消息今天乌克兰与俄罗斯视频网站seo文章该怎么写
  • 赤峰微网站建设西安危机公关公司
  • 网站建设价格明细最近发生的重大新闻
  • 许昌市做网站企业宣传片制作
  • wordpress注册未发邮件郑州seo培训
  • 做网站自动上传文章口碑营销是什么意思