U-Boot移植(12)u-boot的重要细节

发布时间:2023-08-28  

主要过程:查看环境参数stdin,stdout,stderr中对标准IO的指定的设备名称,再按照环境指定的名称搜索devlist,将搜到的设备指针赋给标准IO数组stdio_devices[]。置gd->flag标志 GD_F*G_DEVINIT。这个标志影响putc,getc函数的实现,未定义此标志时直接由串口serial_getc和serial_putc实现,定义以后通过标准设备数组stdio_devices[]中的putc和getc来实现IO。

下面是相关代码:

    void putc (const char c)

         {

         #ifdef CONFIG_SILENT_CONSOLE

          if (gd->flags & GD_F*G_SILENT)//GD_F*G_SILENT无输出标志

           return;

         #endif

          if (gd->flags & GD_F*G_DEVINIT) {//设备list已经初始化

           /* Send to the standard output */

           fputc (stdout, c);

          } else {

           /* Send directly to the handler */

           serial_putc (c);//未初始化时直接从串口输出。

          }

         }

       void fputc (int file, const char c)

        {

         if (file < MAX_FILES)

          stdio_devices[file]->putc (c);

        }

为什么要使用devlist,std_device[]?

为了更灵活地实现标准IO重定向,任何可以作为标准IO的设备,如USB键盘,LCD屏,串口等都可以对应一个device_t的结构体变量,只需要实现getc和putc等函数,就能加入到devlist列表中去,也就可以被assign为标准IO设备std_device中去。如函数

int console_assign (int file, char *devname); /* Assign the console 重定向标准输入输出*/

这个函数功能就是把名为devname的设备重定向为标准IO文件file(stdin,stdout,stderr)。其执行过程是在devlist中查找devname的设备,返回这个设备的device_t指针,并把指针值赋给std_device[file]。

20)enable_interrupts(),使能中断。由于CONFIG_USE_IRQ没有定义,空实现。

    #ifdef CONFIG_USE_IRQ

    /* enable IRQ interrupts */

    void enable_interrupts (void)

    {

     unsigned long temp;

     __asm__ __volatile__("mrs %0, cpsrn"

            "bic %0, %0, #0x80n"

            "msr cpsr_c, %0"

            : "=r" (temp)

            :

            : "memory");

    }

    #else

        void enable_interrupts (void)

    { 

    } 

  21)设置CS8900的MAC地址。

  cs8900_get_enetaddr (gd->bd->bi_enetaddr); 

  22)初始化以太网。

  eth_initialize(gd->bd);//bd中已经IP,MAC已经初始化

  23)main_loop ();定义于common/main.c

  至此所有初始化工作已经完毕。main_loop在标准转入设备中接受命令行,然后分析,查找,执行。


参考:http://deshunfan.blog.163.com/blog/static/34244101200972832324749/#comment=fks_083066081081088066083081094095087082083071080087086066


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    电容是指符合特定规范和标准的电容器,它具有性能可靠、防火、防爆等特性,被广泛应用于各种电气、电子产品中。在空调中,安规电容一般用于电源电路和电机电路中。 空调中的电源电路包含整流器、滤波器和稳压器等元件,这些元件一般都需要......
    将系统的硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好环境。对于一个嵌入式系统,通常BootLoader是依赖于硬件而实现的。对于不同类型的嵌入式芯片、不同的操作系统和外围接口都需要重新移植、修改......
    指令 ffplay -f rawvideo -pixel_format nv12 -video_size WWxHH -i xx.yuv。WW为宽度,HH为高度。因为 RAW Video 中没有视频信息,这些参数都需要......
    ,所有处于编程的芯片都需要上电,都处于电路中。不严格来说利用J-Link、ST-Link、e-Link32等工具进行编程也属于在电路编程(ICP)。 在维基百科中,ISP(在系统编程),也称......
    太麻烦。ADS和仿真器结合是个十分不错的调试环境,于是,将代码就搬到ADS上,这下完全脱离Linux,整个开发过程都在Windows进行。其实是UCOS太简洁了,时钟、接口很多都需要自己开发…小弟......
    ESP8266自动下载电路设计方案;前言 使用过51单片机的朋友会清楚:51单片机在烧写程序的时候需要断一下电再上电;使用过STM32单片机的朋友会清楚:烧写程序时需要设置Boot模式......
    过这个引脚把AP唤醒,再进入语音传输模式(Audio Buffering)。 RSTN:该引脚为D4P的复位脚,在每次烧录FW之前,都需要下拉该引脚一段时间。 WAKEUP:该引脚为AP唤醒D4P的引脚,当......
    从FUSE 启动 01 串行下载 10 内部BOOT 模式 11 保留 一般我们使用 01 10 启动方式 2.1 串行下载 BOOT_MODE[1:0] 为 01; 串行......
    认证。 广告 ARM副总裁兼物联网平台设备总经理Charlene Marini表示,“OEM和企业都需要依靠灵活的解决方案,来通过基于安全信任根的设备,快速、安全地开发、部署......
    目上的Boot称作CB, Customer Boot)。 对于已经下线盒盖的控制器,无论是在供应商或者客户手里测试,只能通过CB刷新App。如果需要CB自刷新,就需要额外的方法。 1、规范: 整车......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>