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


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

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

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

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

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

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

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

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