U-Boot

超详细分析Bootloader到内核的启动流程(万字长文)

别说谁变了你拦得住时间么 提交于 2020-12-17 10:53:31
@[TOC] Bootloader启动流程分析   Bootloader的启动过程可以分为单阶段、多阶段两种。通常多阶段的 Bootloader能提供更为复杂的功能以及更好的可移植性。从固态存储设备上启动的 Bootloader大多都是两阶段的启动过程。第一阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和可移植性。   一般而言,这两个阶段完成的功能可以如下分类: Bootloader第一阶段的功能 硬件设备初始化   首先需要设置时钟,设置MPLL(具体参见下面的FCLK HCLK PCLK 部分)。接着设置CLKDIVN地址为0x4C000014,写入0x05,表示设置分频系数为FCLK:HCLK:PCLK=1:4:8。接着,关闭看门狗,关中断,启动ICACHE,关闭DCACHE和TLB,关闭MMU(ICACHE为指令缓存,可以不关闭,指令直接操作的硬件,实际的物理地址。但是DCACHE就必须要关闭,此时MMU没有使能,虚拟地址映射不成功,sdram无法访问,DCACHE无数据)。start.s具体代码如下: /* 设置时钟 */ ldr r0, =0x4c000014 // mov r1, #0x03; mov r1, #0x05; // FCLK:HCLK

linux驱动1.驱动框架与GPIO操作

自闭症网瘾萝莉.ら 提交于 2020-12-12 19:42:58
一、驱动程序概念介绍   u-boot的任务是启动内核,内核的任务是启动应用程序 ,应用程序会涉及很多文件和硬件操作(当然不会直接操作硬件),比如读写文件,点灯、获取按键值。   比如对于控制led灯的用户程序与驱动程序,最简单的实现方法是:   应用程序中需要打开led灯,就需要open函数,在内核中的驱动程序中也有对应的led_open函数,这个led_open函数就是用来负责初始化led的引脚功能,应用程序中要调用read函数读取led灯的状态,内核中的驱动程序也有led_read函数。这是应用程序与内核中驱动程序一种最简单的对应方式.   那么应用程序中的open、read函数最终怎样调用到驱动程序中的led_open、led_read呢,中间有哪些东西?   在linux中共有4层软件,如下图: 以下名词解释: 应用程序:就是被调用的那些库函数,例如open、read、write... ... C库(系统调用):其中的其实就是实现open、read这些函数来调用swi val 指令进入内核(函数不同val值都会不同) 内核: 内核根据swi后面不同的值去调用VFS中的system_open/system_read/ system_write等异常处理函数,找到相应的驱动程序(VFS:virtual file system 虚拟文件系统) 例如: int main() {

riscv64 qemu上进行Linux环境搭建与开发记录

浪子不回头ぞ 提交于 2020-12-08 05:02:16
riscv64 qemu上进行Linux环境搭建与开发记录 1.本文说明 2.riscv64 qemu的编译 3.riscv64 交叉编译工具链准备 4.编译uboot 5.编译opensbi 6.编译linux 7.buildroot与rootfs 8.小结 1.本文说明 最近在学习riscv64架构的一些知识,并且利用做一些项目的机会去了解更多的不同种类的的芯片的架构设计。学习riscv的好处在于其架构是开源的,也就是任何人只要有兴趣和时间都可以利用开源的代码在fpga设计出一款自己的CPU出来,我觉得这是一个深入芯片底层设计的很好的机会。从上层到底层,从知其然到知其所以然,这必将是一个循序渐进的过程,本文梳理了一下riscv上的环境搭建方法(ubuntu18.04),让系统在qemu上正常的运行起来。 一个riscv qemu的启动需要经过以下几个步骤: 1.opensbi 2.uboot or linux 3.rootfs 目前这三个部分单独的梳理成文章的章节,之后就可以进行qemu的仿真与运行了。 2.riscv64 qemu的编译 要想系统正常的运行起来,必须编译qemu,我建议用最新版本的qemu,可以在官网上下载最新的源代码进行编译。 https: //www.qemu.org/ 当然可以在github上进行下载: git clone https: //github

第三节,烧录固件。

荒凉一梦 提交于 2020-11-30 23:39:24
我们先来把固件导出来吧, 两种方法: 方法1,安装VMware tools, 我这里安装过了。没关系,那我就重装一下,再来一次。 我们在桌面可以看到VMware Tools,双击鼠标左键打开他 我是将文件复制到家目录的,你们随意, 右键单击,提取到此处。 现在我们打开终端,进入刚才解压的文件夹 记得加sudo来执行这个安装文件 sudo ./vmware- install .pl 全程回车即可, 方法二,使用SAMBA(这个比方法一会方便很多) Ubuntu中打开命令行,输入 sudo apt install samba 完成安装之后,修改samba配置文件 vim /etc/samba/smb.conf 在配置文件末尾添加代码: [linux] comment = smb path = /home/peter/ smb browseable = yes writable = yes read only = no guest ok = yes 为samba服务创建一个共享文件夹 sudo mkdir /home/peter/smb 为文件夹共享文件夹赋权限 sudo chmod 777 /home/peter/smb 重启samba服务 sudo service smbd restart sudo service nmbd restart 查看下自己IP ifconfig

【转载】Linux设备树(Device Tree)机制

时间秒杀一切 提交于 2020-11-26 16:50:08
转:Linux设备树(Device Tree)机制 目录 1. 设备树(Device Tree)基本概念及作用 2. 设备树的组成和使用   2.1. DTS和DTSI   2.2. DTC   2.3. DTB   2.4. Bootloader 3. 设备树中dts、dtsi文件的基本语法   3.1. chosen node   3.2. aliases node   3.3. memory node   3.4. 其他节点     3.4.1. Reg属性     3.4.2. Compatible属性     3.4.3. Interrupts属性     3.4.4. Ranges属性 4. DTB相关结构   4.1. Header   4.2. 字符串块   4.3. memory reserve map 5. 解析DTB的函数及相关数据结构   5.1. machine_desc结构   5.2. 设备节点结构体   5.3. 属性结构体   5.4. uboot下的相关结构体 6. DTB加载及解析过程 7. OF的API接口 1. 设备树(Device Tree)基本概念及作用 在内核源码中,存在大量对板级细节信息描述的代码。这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录,对内核而言这些platform设备

zynq linux 双网卡实现

这一生的挚爱 提交于 2020-11-19 06:00:19
  Vivado:2016.4   Linux:Ubuntu16.4   ZYNQ:xc7z020      下载文件名称   2016.4-zed-release.tar.xz   device-tree-xlnx-xilinx-v2016.4.zip   linux-xlnx-xilinx-v2016.4.zip   u-boot-xlnx-xilinx-v2016.4.zip   arm_ramdisk.image.gz   参考链接:http://www.fpgadeveloper.com/2016/05/multi-port-ethernet-in-petalinux.html   ZYNQ下PS端有两个网口,GEM0、GEM1,GEM0默认通过MIO端口接到外部PHY。GEM1通过EMIO连接芯片外部PHY。   一、FPGA在搭建block design的时候选中eth1,同时选中eth1的MDIO。   二、系统识别GEM1的时候,根据DT可能需要访问MDIO,也可能不需要访问。     1. 如果需要访问MDIO的话,在uboot启动完成后需加载FPGA的bit文件,由于正常生成的FPGA文件过大,因此此处重新生成 一个简化版的FPGA系统,只包括了ARM部分的block design,然后选中压缩bit文件,生成的bit文件大概500多k,加上fsbl.elf

beaglebone AI环境搭建与运行

半腔热情 提交于 2020-11-16 01:51:36
beaglebone AI环境搭建与运行 1.前言 2.beaglebone AI 开发板特性 3.beaglebone AI开发环境搭建 3.1 硬件连接 3.2 arm 交叉编译工具链 3.3 编译uboot 4.beaglebone AI启动方式 5.beaglebone AI的Linux编译 5.1 编译kernel 5.2 选择根文件系统 6.将Linux的镜像烧录 6.1 格式化SD卡 6.2 拷贝rootfs到SD卡中 6.3 拷贝Linux内核镜像 6.4 拷贝设备树文件 6.5 拷贝内核模块 7.启动与验证 8.总结 1.前言 本文主要介绍beaglebone的开发过程与启动方式。同时将一套嵌入式Linux开发环境搭建起来。以便于更好的掌握和理解beaglebone AI的使用。工欲善其事,必先利其器,搭建好完整的开发环境,后续的工作才能更好的开展起来。要想用好一款芯片,也需要很好的理解其启动方式。下面来实际的展示操作流程。 2.beaglebone AI 开发板特性 首先我选择beaglebone AI作为嵌入式Linux学习的开发板,是因为有着良好的芯片datasheet支持,以及TI芯片的大规模的使用,使得其通用性和扩展性更强。板子颜值高,性能强、可玩性好、可以DIY的工程很多。这些都让我对这个板子有着推进下去的动力,在不断挖坑与填坑的过程中

OpenOCD-JTAG调试

℡╲_俬逩灬. 提交于 2020-11-09 17:17:11
目录 Todo 概述 断点 快速使用 测试led的断点 NAND调试(进阶) OpenOCD 启动OpenOCD OpenOCD命令 OpenOCD烧录程序 GDB GDB命令 使用条件 使用步骤 Eclipes 使用条件 简单工程 注意 u-boot工程 STM32烧写程序 title: OpenOCD-JTAG调试 tags: ARM date: 2018-10-13 23:36:28 --- Todo [ ] JTAG 调试linux内核 [ ] linux下使用OpenOCD调试 [x] win下使用OpenOCD调试 概述 学习文档 韦东山 Eclipse,OpenOCD,OpenJTAGv3.1嵌入式开发教程版本5.pdf 硬件连接: PC>JTAG调试器>CPU 软件控制:IDE(KEIL/ADS/)> GDB(指令)> OpenOCD(实际命令)> JTAG调试器> 单板 JTAG控制CPU功能: 当CPU的地址信号ADDR=xxx,停止CPU-硬件断点 当CPU的数据信号DATA=xxx,停止CPU--软件断点 重新运行CPU 读取R0,..寄存器 控制外设,内存 百问网的 OpenJTAG.exe 这个GUI实际是封装了 openocd.exe 命令行 设置Workdir到程序代码目录 点击 telnet ,或者直接cmd输入 telnet 127.0.0.1

U-Boot启动过程

戏子无情 提交于 2020-10-24 05:21:31
一、U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: 1、第一阶段的功能 硬件设备初始化 加载 U-Boot 第二阶段代码到RAM空间 设置堆栈 跳转到第二阶段代码入口 图 1 U-Boot启动第一阶段流程 2、第二阶段的功能 初始化本阶段使用的硬件设备 检测系统内存映射 将内核从Flash读取到RAM中 为内核设置启动参数 调用内核 U-Boot启动第二阶段流程如下: 图 2 U-Boot第二阶段执行流程 来源: oschina 链接: https://my.oschina.net/u/4409634/blog/4295217

软硬件全开源5种操作系统迅为IMX6开发板稳定运行看得见

爷,独闯天下 提交于 2020-10-22 18:15:41
全工业级底板经过严苛高低温检测-40°C到85°C稳定运行 系统支持 Android 4.4.2/6.0系统 Linux + Qt4.7/5.7系统 Ubuntu 12.04/16.04系统 开发板硬件原理的理解,帮助搭建编译环境、编译系统以及烧写,协助检查原理图并提供详细的硬件设计指导文档 核心板参数 尺寸 51mm*61mm 四核商业级-2G NXP 四核 i.MX6Q,主频 1 GHz 内存:2GB DDR3;存储:16GB EMMC;SATA接口:支持 双核商业级-1G NXP 双核精简版 i.MX6DL,主频 1GHz 内存:1GB DDR3;存储:8GB EMMC;SATA接口:不支持 四核工业级-1G NXP 四核 i.MX6Q,主频 800MHz 内存:1GB DDR3;存储:8GB EMMC;SATA接口:支持 四核Plus版本 NXP 四核 i.MX6Q,主频 1 GHz 内存:2GB DDR3;存储:16GB EMMC;SATA接口:支持 EEPROM 4MB的EEPROM用来存储关键数据 电源管理 内部独立 工作电压 5V 系统支持 Android4.4.2/6.0系统 Linux + Qt4.7/5.7系统 Ubuntu12.04/16.04系统 商业级运行温度 0℃到+70 ℃ 工业级运行温度 -40℃到+85 ℃ 引角扩展 引出脚多达320个