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

发布者:谁与争锋1最新更新时间:2023-08-28 来源: elecfans关键字:U-Boot  移植 手机看文章 扫描二维码
随时随地手机看文章

主要过程:查看环境参数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


关键字:U-Boot  移植 引用地址:U-Boot移植(12)u-boot的重要细节

上一篇:U-Boot移植(11)u-boot的重要细节
下一篇:U-Boot移植(10)u-boot重定位后的内存分布

推荐阅读最新更新时间:2024-11-20 10:19

Linux 3.3.0移植到S3C6410开发板上之一
这里仅仅是移植成功内核,可以挂载文件系统运行,至于驱动会陆续添加。 第一步:到内核官网上下载最新的内核,我下载的是linux-3.3-rc3.tar.bz2。 第二步:解压内核,进入arch/arm/mach-s3c64xx目录下,看到不少6410的板级文件,我们这里选择mini6410开开展工作,在目录下将mach-mini6410.c文件复制一份,命名为:mach-jfj6410.c。这里我们将文件里面关于mini6410的字样都修改为jfj6410.但是这里要注意,MACHINE_START(JFJ6410, JFJ6410 )这里的JFJ6410要使用大写,稍候说明为什么。大家都知道在一个目录下添加了文件后,都应该
[单片机]
STM32F103移植FreeRTOS操作系统
一、建立必要的stm32开发工程 1、FreeRTOS文件夹下存放的是整个FreeRTOS系统的文件夹(也可直接从文件所在文件夹直接调用,加头文件时不要弄错就行)。 FreeRTOS的相应资料(source文件夹)网上很多,可以自行下载。(许多开发板买的时候也会送一些资料的) 2,添加相应文件 1、list.c queue.c task.c位于source根目录下; 2、Port.c和portmacro.c是硬件接口层,位于FreeRTOSSourceportableRVDSARM_CM3文件夹下; 3、heap4.c为内存管理文件,位于FreeRTOS/Source/portable/MemMan
[单片机]
STM32F103<font color='red'>移植</font>FreeRTOS操作系统
stm32 u8g2移植笔记
前言 当初想写一个单色屏菜单时,曾移植过u8g2到STM32平台(这里用的是keil MDK),不过当时一直有一个问题没有搞懂:为什么u8g2用在flash为32k,ram为2k的arduino uno上都不会报空间不足,却在flash为512k,ram64k的stm32zet6上报错空间不足?这是由编译器导致的,arduino使用的是avr-gcc编译器在编译的时候会加-ffunction-sections -fdata-sections,链接的时候会加-Wl,-gc-sections选项,因而可以只链接用到的函数。stm32编译选项中有个类似的选项One ELF Section per Function,勾选该项可以极大的减少
[单片机]
生物合成材料开启非侵入式的移植技术
  据欧洲设计和技术网站Gizmag近日报道,美国科学家在《科学·转化医学》杂志上撰文指出,他们研发出了一种新的生物合成材料,只需在皮下注入这些可永久取代身体软组织的光激活移植物,医生们就可对创伤或疾病造成的组织损伤进行修复和功能重建。这种非侵入式的移植技术尤其适用于面部整形,避免了现有技术存在的疤痕形成及功能丧失等问题,有望开启新的整容时代。 新材料兼具弹性和持久性   美国约翰霍普金斯大学医学院的科学家研制出的新材料PEG-HA由人工合成的聚合物聚乙二醇(PEG)和天然的生物材料透明质酸(HA)制成。聚乙二醇是一种被用作外科胶的人造分子,并不会引起严重的免疫反应。透明质酸是出现在年轻人皮肤上的一种天然成分,能让年轻人的
[医疗电子]
Fedora 、RT-Thread龙芯版移植成功 最便宜龙芯嵌入式开发板发布
近日在CSIP、中国开源软件推进联盟指导下由龙芯俱乐部发起和龙芯梦兰、龙芯中科、OSL联合主办,上海亚太地区经济和信息化人才培训中心(Cifal)、上海市软件行业协会开源软件专业委员会协办的2010年上海龙芯开源技术研讨会在上海举行。活动中探讨了龙芯和开源相关的重要议题,并集中展示了龙芯开源软件大赛的最新的开发成果.上海及附近地区多个开源社区、开源软件和开源企业的主要代表参加了会议,会后催生了多个龙芯开源项目。 2010年10月16日上午10点半,在上海中环国际大厦。来自上海和杭州、苏州、常熟等地的龙芯企业、老师、社区代表和技术人员等开源精英汇聚一堂。会议由龙芯俱乐部发起人石南主持。到场的主要人员有Cifal 技术总监乔元
[网络通信]
at91sam9261-ubifs成功移植
based on: linux-3.6.9, 128M Nand, busybox-1.20.2 ubi命令来自busbox。 如下: flash_eraseall /dev/mtd1 ubiattach /dev/ubi_ctrl -m 1 ubimkvol /dev/ubi0 -s 104857600 -N rootfs mount -t ubifs /dev/ubi0_0 /media 由于ubifs自身占用,不可能把128M全部使用,暂时只使用100M=104857600 Bytes。 ~#flash_eraseall /dev/mtd1 Erasing 128 Kibyte @ 7fc0000 -
[单片机]
嵌入式C语言位操作的移植与优化
引 言 单片机的应用越来越广泛,种类也越来越多。由于嵌入式C语言可读性强、移植性好,与汇编语言相比大大减轻了软件工程师的劳动强度,因而越来越多的单片机工程师开始使用C语言编程。但C语言的可移植性仅限于与硬件无关的子程序,而与具体硬件有关的子程序则无法移植。在单片机应用中,位操作(特别是对引脚的位操作)非常普遍,如EEPROM数据和IC卡数据的读写、字段式LCD显示等,很多带串目的集成电路都需要单片机用软件来做I/O口读写程序。如何让这些子程序既有很好的通用性,生成代码的效率又高,是很多软件工程师都在考虑的问题。这里介绍两种C语言位操作的移植方法。 1 用逻辑运算实现位操作 请看下面这个子程序: 这是通过单片机引
[单片机]
嵌入式C语言位操作的<font color='red'>移植</font>与优化
STM32 移植 STemwin
移植STemwin 平台STM32F429+LTDC+SDRAM 其实不难就是给自己做个记录,年纪大了记性不好。。。 自己先驱动好TFTLCD, LTDC, SDRAM等 Cubemx配置增大堆栈大小,不然容易出错 需要添加以下文件进行配置 挨个文件配置 GUIConf.c里面主要修改ram大小,酌情而定,不宜太大。 #define GUI_NUMBYTES (1024)*50 GUIDRV_Template.c里面修改以下函数TBD by customer部分添加画点,读点,填充函数 static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, i
[单片机]
STM32 <font color='red'>移植</font> STemwin
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved