历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2018年04月15日 | TQ2440之uboot---2.U_BOOT_CMD 分析

2018-04-15 来源:eefocus

start_armboot

{

}

main_loop

{

1. 环境变量mtdparts, 调用mtdparts_init

2. 如果在启动过程中  无空格键按下则boot_zImage

有空格键按下则 run_command("menu",0)

3. shell过程,读取用户端输入并执行相应的命令

{

从输入端获得命令,保存在全局变量comsole_buffer中

执行 run_command();

}

}

run_command

{

1. 对\;进行解析,划分出一个个完整的命令

2. 然后对每一个完整的命令执行:

{

parse_line

{

line 是指整个的命令行字符串;

假设line = nboot 0x32000000 kernel; bootm 0x32000000

先去掉开头的空格,

然后对命令进行解析,找到空格之后将空格替换为\0,这样解析出命令和参数

}

find_cmd(argv[0])

{

从 __u_boot_cmd_start 到 __u_boot_cmd_end 的array进行遍历,

从找到的cmd_tbl_t中,字符串寻找cmdtp->name与argv[0]相同的命令

}

找到命令后,调用cmd_tbl_t->cmd调用函数

}

}

1.

U_BOOT_CMD(

    mtdparts,   6,  0,  do_jffs2_mtdparts,

    "mtdparts- define flash/nand partitions\n",

    "\n"

);

cmd_tbl_t __u_boot_cmd_mtdparts Struct_Section = {mtdparts, 6, 0, do_jffs2_mtdparts, usage, help};

以下从doc/README.command 翻译

要想在u-boot中添加命令,必须新建一个command structure。要想创建一个command structure,则首先包含 "command.h" 头文件,然后用U_BOOT_CMD宏填充 cmd_tbl_t struct。

经过宏展开后新创建的这个结构体的名字会__u_boot_cmd开头,然后连接器会把这个结构体连接到指定的section上。

这样link才能从代码中提取所有的命令,生成一个静态的array。这样就可以通过遍历一个以__u_boot_cmd_starty开头的数组找到所要的命令。

1.

struct cmd_tbl_s {

    char        *name;      /* Command Name         */

    int     maxargs;    /* maximum number of arguments  */

    int     repeatable; /* autorepeat allowed?      */

                    /* Implementation function  */

    int     (*cmd)(struct cmd_tbl_s *, int, int, char *[]);

    char        *usage;     /* Usage message    (short) */

    char        *help;      /* Help  message    (long)  */

#ifdef CONFIG_AUTO_COMPLETE

    /* do auto completion on the arguments */

    int     (*complete)(int argc, char *argv[], char last_char, int maxv, char *cmdv[]);

#endif

};

#define Struct_Section  __attribute__ ((unused,section (".u_boot_cmd")))

#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}

typedef struct cmd_tbl_s    cmd_tbl_t;

extern cmd_tbl_t  __u_boot_cmd_start;

extern cmd_tbl_t  __u_boot_cmd_end;

这里要看的是##name和#name这两个操作.##name将字符直接跟在后面, #name会将name这个字符中以"..."的形式放置。

1. 

U_BOOT_CMD(

    tftpboot,   3,  1,  do_tftpb,

    "tftpboot- boot image via network using TFTP protocol\n",

    "[loadAddress] [bootfilename]\n"

);

usage=    "tftpboot- boot image via network using TFTP protocol\n";

help=    "[loadAddress] [bootfilename]\n";

cmd_tbl_t __u_boot_cmd_tftpboot __attribute__ ((unused,section (".u_boot_cmd"))) = {"tftpboot", 3, 1, do_tftpb,     "tftpboot- boot image via network using TFTP protocol\n",

    "[loadAddress] [bootfilename]\n"};

    

int do_tftpb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])

{

    return netboot_common (TFTP, cmdtp, argc, argv);

}


推荐阅读

史海拾趣

南京绿芯(Grenergy)公司的发展小趣事

对于电子消毒柜电路,网友可能的问题涉及多个方面,包括故障排查、日常维护、使用注意事项等。以下是一些可能的问题及详细回答:

一、故障排查类问题

1. 消毒柜通电后跳闸怎么办?

回答
消毒柜通电后跳闸可能是由电路短路引起的。首先,检查电源插座的火线(L)、零线(N)、地线(E)是否接线正确。其次,按照消毒柜上的线路图检查柜内线路接线是否正确,以及线路绝缘层是否被破坏(如被螺丝钻破、被金属边角划破等)。如果以上检查均正常,可能是电源板或继电器等部件损坏,建议联系专业维修人员进行检查和更换。

2. 消毒柜插上电源后无法启动,指示灯不亮怎么办?

回答
消毒柜无法启动且指示灯不亮,可能是由以下原因造成:电源插座无电或接触不良、熔断器烧坏、电源线与机体接触不良或断路、变压器烧坏或断路、电路板烧坏、继电器失灵等。解决方法包括检查电源插座、更换熔断器、检查并修复线路、更换电路板或继电器等。如果问题依然存在,建议联系专业维修人员进行检查。

二、日常维护类问题

1. 消毒柜需要定期清洁哪些部位?

回答
消毒柜需要定期清洁的部位包括柜体内部、层架、门封条以及散热孔等。清洁时,应使用柔软的布或海绵,避免使用腐蚀性强的清洁剂。同时,要注意不要将水溅入电路板等电子元件区域,以免造成短路或损坏。

2. 消毒柜的电源线应该如何保养?

回答
消毒柜的电源线应定期检查是否老化或破损,如有发现应及时更换。在使用过程中,应避免电源线过度弯折或受到重物压迫,以免影响其使用寿命和安全性。此外,电源线应远离高温、潮湿和腐蚀性强的环境,以确保其绝缘性能不受影响。

三、使用注意事项类问题

1. 消毒柜在使用时需要注意哪些安全问题?

回答
消毒柜在使用时需要注意以下安全问题:

  • 确保电源插座接地良好,避免漏电危险。
  • 不要将易燃易爆物品放入消毒柜内,以免发生火灾或爆炸。
  • 在使用过程中,应避免频繁开关柜门,以免影响消毒效果和能耗。
  • 使用完毕后,应及时关闭电源并拔掉插头,以节约能源和延长设备使用寿命。

2. 消毒柜是否可以一直插电使用?

回答
消毒柜是否可以一直插电使用取决于用户的使用情况和需求。如果用户经常使用消毒柜且没有其他特殊需求,可以保持电源连接;如果用户不经常使用消毒柜或者有其他特殊需求(如节约能源、避免设备老化等),建议在使用前提前通电,并在非使用状态下拔掉电源。此外,为了确保安全,插座应具备防水、防漏电等功能。

综上所述,对于电子消毒柜电路的问题,网友可能关注故障排查、日常维护和使用注意事项等方面。通过了解这些问题的解决方法和注意事项,可以更好地使用和维护消毒柜,确保其正常运行和延长使用寿命。

歌尔(Goertek)公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的关键设备,其专业性与科普性兼具。从广义上讲,机顶盒泛指一切与电视机连接的网络终端设备,能够接收并转换多种信号源,包括有线电缆、卫星天线、宽带网络及地面广播等,为观众提供丰富多样的视听体验。

在数字电视时代,机顶盒的核心功能在于实现数模转换,即将接收到的数字信号转换为电视机可识别的模拟信号,从而使用户能在模拟电视机上观看高清甚至超高清的数字电视节目。此外,机顶盒还具备强大的增值服务功能,如提供电子节目指南、因特网网页浏览、在线购物、视频点播等,使电视机从单向接收信息的设备转变为互动的智能终端。

随着技术的不断进步,机顶盒正朝着高清化、智能化方向发展。高清、超高清技术的广泛应用,使得机顶盒能够呈现更为细腻的画面和震撼的音效。同时,智能化技术的融入,如语音助手、智能推荐等功能的实现,进一步提升了用户的使用体验。未来,随着5G、虚拟现实和增强现实等技术的不断发展,机顶盒的应用场景将更加广泛,为用户带来更为沉浸式和互动式的观影体验。

综上所述,机顶盒作为连接电视与外部世界的桥梁,不仅丰富了人们的视听生活,更推动了电视产业的数字化转型与发展。

DIOTEC公司的发展小趣事

1973年,DIOTEC半导体股份有限公司在德国的海特尔斯海姆正式成立。公司创始人以半导体和整流产品的研发为起点,立志在电子行业中占据一席之地。在创立初期,DIOTEC就注重技术创新和品质控制,不断推出符合市场需求的高品质产品。凭借这种执着和坚持,DIOTEC逐渐在欧洲市场崭露头角。

DYMO公司的发展小趣事

为了扩大市场份额,DYMO公司积极寻求与各大零售商和办公用品供应商的合作。通过与这些合作伙伴建立紧密的合作关系,DYMO公司的产品得以更广泛地进入市场,并被更多的消费者所熟知。此外,DYMO公司还积极开拓国际市场,将其产品销往全球各地。

EPSON公司的发展小趣事

EPSON始终将品质视为企业发展的生命线。公司建立了严格的质量管理体系,从原材料采购到生产、检测、包装等各个环节都进行严格的质量控制。同时,EPSON还积极引进先进的生产设备和检测技术,不断提高产品的品质和性能。这种对品质的执着追求使得EPSON的产品在市场上赢得了良好的口碑和信誉,逐渐建立了起强大的品牌形象。

Anixter Inc公司的发展小趣事

EPSON公司,原名精工爱普生,成立于1942年,最初以制造手表起家。然而,随着技术的不断进步和市场需求的变化,EPSON逐渐将业务扩展到电子领域。在创始人及其团队的带领下,EPSON凭借其卓越的技术创新能力,成功研发出了一系列具有划时代意义的电子产品,如世界上第一台微型打印机和喷墨打印机,奠定了其在电子行业的领先地位。

问答坊 | AI 解惑

联想LJ2500打印机打印原理图出现错误的解决方法

联想LJ2500打印机由于驱动程序的问题,在WINXP系统下打印Protel原理图时,图中的字符都是反向的,即镜像打印,真是一大缺陷,不知道联想是怎么搞的。就是将原理图复制到WORD文档中打印也是一样的。      我找到了一个解决方法 ...…

查看全部问答>

模拟电路教程

模拟电路教程,…

查看全部问答>

求教关于蓝牙驱动SLEEP后的问题!

我在控制面板扫描蓝牙设备能扫描到,可以当WINCESLEEP起来后,再在控制面板扫描时,就扫描不到了,并弹出对话框“BLUETOOTH HARDWARE ERROR 10050。。。。。。”有哪位兄弟遇到过这样的情况呀,是哪一块把连接断开了吗?请多多赐教呀!…

查看全部问答>

谁有amx中控的编程软件和说明书?

谁有amx中控的编程软件和说明书?我去AMX公司,他们老板说网上下载,可是AMX的网站的下载在维护,不知那位哥们姐们有这块的编程软件和说明书,给个下载地址,谢谢…

查看全部问答>

求助:如何控制电压的大小

请问下如何通过CPU,来控制电压的大小? 意思就是说CPU给出如0101...的命令,应该怎么设计电路,或是有什么器件,可以使到这些命令可以控制电路中某个点电压的大小。…

查看全部问答>

求助,LM3S8962 GPIO模拟SPI驱动VS1003

我想用LM3S8962驱动VS1003,但是8962的SPI被SD卡和OLED占用了,我打算用GPIO模拟SPI驱动VS1003,我是按照TI 最新的StellarisWare里的SoftSSI配置的GPIO,从icdev下了VS1003的驱动,配置好有没有听到正弦波,检测CLK好像也不对,请高手给指点一下吧 ...…

查看全部问答>

实在被MSP430FG439集成的OA运放搞晕了.

MSP430FG439集成的的三个运放,datasheet上引脚的标注不怎么看得明白,有相关的中文资料吗,实在是被弄晕了!这些运放能设置各自的放大倍数吗,有没有例子啊!救命!!…

查看全部问答>

iar 自带内部函数

在iar编译工具中,内置了一些内部函数,也就是Intrinsic.h头文件,里面的许多函数有些可以加快编写速度,有些可以指定变量的存放位置,还有些可以实现复杂的功能,但是我也只是了解其中的一些,请问各位谁有内部函数的讲解可以拿出来分享一下,感激 ...…

查看全部问答>

我想用STM32和tft做一个简易的示波器,谁能指导下啊

毕业后,找了个测试工作,觉得没前途,于是想抓紧时间学点别的。本人水平有限,听人说这样很好实现,指标要求不高,主要是锻炼一下。找了好多资料,买了个最小系统,和tft屏幕。其他的打算自己制作。但是不知从何处下手。谁给点建议…

查看全部问答>

电子信息类工程师知识体系分析(二)

下面将三种知识结构细化分为不同的项目详细进行分析1 软硬件开发       1) 硬件设计硬件设计能力主要指硬件设计和调试的能力,包括电路设计能力,设备仪器的使用和掌握,电路调试能力。一般来说,硬件设计能力是硬件工程师需要 ...…

查看全部问答>