问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

uboot如何调用驱动接口

发布网友 发布时间:2022-04-22 02:58

我来回答

1个回答

热心网友 时间:2023-12-01 11:27

u-boot是一种普遍用于嵌入式系统中的Bootloader,Bootloader是在操作系统运行之前执行的一小段程序,通过它,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的软硬件环境,为最终调用操作系统内核做好准备。Boot Loader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统。系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的Boot Loader程序。  u-boot目录结构:  1、board中存放于开发板相关的配置文件,每一个开发板都以子文件夹的形式出现;  2、Commom文件夹实现u-boot行下支持的命令,每一个命令对应一个文件;  3、cpu中存放特定cpu架构相关的目录,每一款cpu架构都对应了一个子目录;  4、Doc是文档目录,有u-boot非常完善的文档;  5、Drivers中是u-boot支持的各种设备的驱动程序;  6、Fs是支持的文件系统,其中最常用的是JFFS2文件系统;  7、Include文件夹是u-boot使用的头文件,还有各种硬件平台支持的汇编文件,系统配置文件和文件系统支持的文件;  8、Net是与网络协议相关的代码,bootp协议、TFTP协议、NFS文件系统得实现;  9、Tooles是生成U-boot的工具。  其中比较重要的目录就是/board、/cpu、/drivers和 /include目录,如果想实现u-boot在一个平台上的移植,就要对这些目录进行深入的分析。  u-boot的启动过程:  系统启动的入口点。既然我们现在要分析u-boot的启动过程,就必须先找到u-boot最先实现的是哪些代码,最先完成的是哪些任务。另一方面一个可执行的image必须有一个入口点,并且只能有一个全局入口点,所以要通知编译器这个入口在哪里。由此我们可以找到程序的入口点是在/board /lpc2210/u-boot.lds中指定的,其中ENTRY(_start)说明程序从_start开始运行,而他指向的是cpu /arm7tdmi/start.o文件。因为我们用的是ARM7TDMI的cpu架构,在复位后从地址0x00000000取它的第一条指令,所以我们将Flash映射到这个地址上,这样在系统加电后,cpu将首先执行u-boot程序。  u-boot的启动过程是多阶段实现的,分了两个阶段:  第一阶段是用汇编写的,主要任务是:  1、CPU 自身初始化:包括MMU,Cache,时钟系统,SDRAM 控制器等的初始化;  2、重定位:把自己从非易失性存储器搬移到 RAM 中;  3、分配堆栈空间,设置堆栈指针;  4、清零 BSS 数据段;  5、跳转到第二阶段入口函数 start_armboot();  第二阶段是用C写的,主要任务是:  1、为 U-boot 内部私有数据分配存储空间,并清零;  2、依次调用函数指针数组 init_sequence 中定义的函数进行一系列的初始化;  3、如果系统支持 NOR Flash,调用flash_init ()和display_flash_config ()初始化并显示检测到的器件信息;  4、如果系统支持 LCD 或VFD,调用lcd_setmem()或vfd_setmem()计算帧缓(Framebuffer)大小,然后在BSS 数据段之后为Framebuffer 分配空间,初始化gd->fb_base 为Framebuffer 的起始地址;  5、调用 mem_malloc_init()进行存储分配系统(类似于C 语言中的堆)的初始化和空间分配;  6、如果系统支持 NAND Flash,调用nand_init ()进行初始化;  7、如果系统支持 DataFlash,调用AT91F_DataflashInit()和dataflash_print_info()进行初始化并显示检测到的器件信息;  8、调用 env_relocate ()进行环境变量的重定位,即从Flash 中搬移到RAM 中;  9、如果系统支持 VFD,调用drv_vfd_init()进行VFD 设备初始化;  10、从 环 境 变 量 中 读 取 IP 地址和MAC 地址, 初始化gd->bd-> bi_ip_addr 和gd->bd->bi_enetaddr;  11、调用 jumptable_init ()进行跳转表初始化,跳转表在global_data 中,具体用途尚不清楚;  12、调用 console_init_r()进行控制台初始化;  13、如果需要,调用 misc_init_r ()进行杂项初始化;  14、调用 enable_interrupts ()打开中断;  15、如果需要,调用board_late_init()进行单板后期初始化,对于AT91SAM9260EK,主要是以太网初始化;  16、进入主循环:根据用户的选择启动 linux,或者进入命令循环执行用户输入的命令;  这部分是一些相对变化不大的部分,我们针对不同的板子改变它调用的一些初始化函数,并且通过设置一些宏定义来改变初始化的流程,所以这些代码在移植的过程中并不需要修改,也是错误相对较少出现的文件。在文件的开始先是定义了一个函数指针数组,通过这个数组,程序通过一个循环来按顺序进行常规的初始化,并在其后通过一些宏定义来初始化一些特定的设备。在最后程序进入一个循环,main_loop。这个循环接收用户输入的命令,以设置参数或者进行启动引导。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 UCOS里对驱动接口有标准的定义么? 主板上硬盘驱动器接口通常标注有哪些 硬盘驱动器的接口标准是什么? 感觉一个人精神很不正常但是又没有依据,有什么方... 感觉自己有点精神不正常.我该怎么办 精神状态不好怎么办? 家人精神不正常怎么办 精神不正常的人怎么治疗? 精神状态不好是什么情况 怎么判断一个人是否精神不正常? 感觉自己精神不正常怎么办 说一个人精神不正常是什么意思? 精神不正常怎么办? 精神轻度不正常的表现有哪些?该如何理解精神不正常? 一个人精神不正常的话有什么表现 精神异常有哪些异常信号? 精神不正常的人有什么表现 精神不正常的表现? 精神轻度不正常的表现有哪些?你知道吗? 一个人精神不正常表现 接口程序与驱动程序有何区别? 怎么驱动电脑USB接口? linux下应用层怎么调用SD卡驱动接口 硬盘驱动接口都有什么类型的? 关于USB接口驱动的问题 ZIP驱动器的接口 以下哪个不是硬盘驱动器的接口电路 USB驱动是针对接口的还是针对设备的 如果电脑使用其他的接口需要什么?设备需要驱动? 怎么样看电脑USB接口的驱动器? 单独驱动USB接口的方法。与操作。 请教下硬盘接口驱动和AGP接口驱动是什么东东 驱动电机控制器都有哪些接口?及各接口定义? 如何把安卓驱动封装成jni接口 日本“本格派”推理小说的代表人物及其作品 堪称是日本本格推理界的顶级作品有哪些? 什么叫做本格推理?本格推理有哪些经典作品? 开机显示器没反应,显卡风扇转一下就不转了,指示灯和CPU的风扇是正常 日本推理本格派的代表人和代表作是什么? 有哪些经典的本格推理值得一读