U-Boot

uboot的WATCHDOG_RESET()执行路径

江枫思渺然 提交于 2020-08-16 10:58:42
执行路径如下: init_sequence_r[] -> initr_watchdog() -> wdt_start(): include/wdt.h (default 60 second) -> INIT_FUNC_WATCHDOG_RESET (common/board_r.c) -> init_func_watchdog_reset() -> WATCHDOG_RESET() -> watchdog_reset() : drivers/watchdog/wdt-uclass.c -> get_timer() -> wdt_reset() -> ops->reset() -> -> WATCHDOG_RESET(): drivers/serial/serial-uclass.c -> xxxxx_tstc(): (串口驱动里会调用此接口,如使用的pl010串口,那么源码在driver/serial/serial_p101x.c中) 来源: oschina 链接: https://my.oschina.net/u/4324904/blog/4302188

Linux内核启动流程-迅为IMX6ULL开发板(二)

邮差的信 提交于 2020-08-15 14:48:34
基于迅为-IMX6ULL开发板 Linux 内核启动(三):内核初始化 start_kernel是所有Linux平台进入系统内核初始化后的入口函数,它主要完成剩余的与 硬件平台相关的初始化工作,在进行一系列与内核相关的初始化后,调用第一个用户进程- init 进程并等待用户进程的执行,这样整个 Linux内核便启动完毕。 30.3.1 start_kernel 函数 start_kernel 通过调用众多的子函数来完成 Linux 启动之前的一些初始化工作,由于start_kernel 函数里面调用的子函数太多,而这些子函数又很复杂,因此我们简单介绍一下一些重要的子函数。start_kernel 函数定义在文件 init/main.c中。精简并添加注释后的 start_kernel 函数内容如下: asmlinkage __visible void __init start_kernel(void) { char *command_line; char *after_dashes; lockdep_init(); /* lockdep 是死锁检测模块,此函数会初始化 * 两个 hash 表。此函数要求尽可能早的执行! */ set_task_stack_end_magic(&init_task); /* 设置任务栈结束魔术数, *用于栈溢出检测 */ smp_setup

解压内核镜像

荒凉一梦 提交于 2020-08-14 22:48:11
步骤 0 uboot 将 zImage 复制到内存之后,跳转到 zImage 处开始执行,首先执行的代码是 arch/arm/boot/compressed/head.S 文件,首先是一些涉及不同体系结构调试相关的汇编宏定义 # ifdef DEBUG # if defined(CONFIG_DEBUG_ICEDCC) # if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K) || defined(CONFIG_CPU_V7) .macro loadsp, rb, tmp .endm .macro writeb, ch, rb mcr p14, 0 , \ch, c0, c5, 0 .endm ... 省略 ... # endif # endif # endif 步骤 1 首先是保存 bootloader 传递过来的机器 ID 和 atags 起始地址 @ 设置段名 .section ".start" , #alloc, #execinstr .align .arm @ 设置指令为 arm 模式 start: .type start, #function @ 声明为函数标签 .rept 7 mov r0, r0 . endr ARM ( mov r0, r0 ) ARM ( b 1f ) @ 向下跳转 THUMB ( adr

一文看懂如何配置OK335x平台 uboot环境变量工具

对着背影说爱祢 提交于 2020-08-13 20:35:47
1.1 软件介绍 在实际开发过程中客户往往需要在 uboot 中配置 引脚 的默认功能、L C D时序参数来满足自身的功能需求,但是对于不善于修改uboot等底层代码的用户来说,这必将延长开发周期。针对这个问题, 飞凌 专门研发了该款上位机配置软件,通过软件配置即可实现上述全部功能。 将OK335pinmux 拷贝到 windows系统的pc,存放OK335pinmux的路径不能包含中文。进入OK335pinmux 目录,双击 pinmux.exe启动应用。 选择 OK335平台,点击start按钮,进入配置界面: 如上图所示,该软件集成了引脚配置, LCD时序参数设置,以及uboot环境变量编辑三个主要功能。 1. 2 Pinmux 配置 在 uboot的初始化阶段,uboot会初始化部分引脚的功能与状态,这些引脚的默认值目前已经全部集成到该软件中,点击左侧的PAD列表右侧的窗口中则会显示对应的设置值。 以 conf_lcd_data0 为例,点击左侧列表中的 LCD_DATA0,右侧窗口中便会显示飞凌设置的默认值 在 芯片 手册《 S itara AM335x {link 31 0} Cortex -A8 Microprocessors(MPUs) 》中搜索 LCD_DATA0 找到 LCD_DATA0 可以查看具体的模式信息,可以看出对于 LCD_DATA 脚,在

攻城狮分享-飞凌RK3399开发板测试常见问题及解决方案分享

試著忘記壹切 提交于 2020-08-13 04:56:42
一. OK3399-C 开发板启动时,调试串口打印乱码问题分析: 以下为打印信息: 问题定位: 参照《软件手册第二章 2.2 》,设置串口调试软件,波特率设置: 1500000 ,请检查是否少写了一个零,如果少了的话,会直接打印乱码。 设置了正确的波特率,点击 open ,报错,是因为串口驱动不兼容所致,在 wince10 上, 许多用户如果不安装资料工具中提供的驱动包,使用调试串口会出现乱码。 优化方案:鉴于 有些用户 在使用时不详细看软件手册,出现以上问题。 技术工程师已经更改了驱动芯片, 芯片型号: CP2102N,更改后用户使用自己电脑上自带的串口驱动也可以。 备注:更改要求已经提交给了生产,目前已经针对库存更改完毕。 注意事项: OK3399-C 平台调试串口使用的是 Mirco USB 接口,板载 USB 转 UART 芯片,无需用户购买 USB 转串口调试工具,使用极其简单方便。首先使用 Micro USB 线将 PC 与开发板的 Debug ( UART2 ) -microUSB 类型接口连接,打开开发板电源, Windows 将自动搜索并安装驱动程序,如果您的系统无法安装驱动程序,或者安装之后无法打开,请使用用户资料工具目录提供的驱动包 CP210x_VCP_Windows_XP_Vista.zip 进行安装。 二. 关于 用户 自己新作底板,出现 WiFi

从零开始zynq linux AXI DMA传输

南楼画角 提交于 2020-08-13 02:06:24
本文从0开始叙述过程。 使用的工具为vivado2016.4,sdk也是2016.4. 准备工作: 首先下载如下的目标文件: 1.下载xilinx官方的bootloader文件 $ git clone https://github.com/Xilinx/u-boot-xlnx.git boot_loader-generator 2.下载xilinx device tree生成工具 git clone https://github.com/Xilinx/device-tree-xlnx.git device_tree-generator 3.下载dtc编译工具 git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git dtc 4.下载linux kernel git clone https://github.com/Xilinx/linux-xlnx.git linux_kernel-sources 5.下载root file system $ git clone git://git.buildroot.net/buildroot file_system 6.拷贝用户空间AXIDMA测试程序 git clone https://github.com/bperez77/xilinx_axidma PL端 1.创建PL端工程

FPGA

蹲街弑〆低调 提交于 2020-08-11 23:08:56
FPGA - Zynq - 加载 - BootROM 题外话 BootROM BootROM Header Definition BootROM Header Searching and Loading 总结 题外话 第一次使用Markdown编写博客,之前都是直接用word或者onenote写好之后复制到博客上,发现文字编排效果很差,不忍翻阅下去。所以转投markdown怀抱。 这里将会新开一个章节,专门更新关于Zynq的一些心得,我希望能够完成以下几个方面: 搞懂Zynq的底层机制 实现Multiboot和Fallback AXI4接口 PS部分,RTOS,Linux, etc PL部分, HDL 因此,我希望能够通过Zynq片上强大的FPGA资源和ARM资源,来完成FPGA工程师和ARM工程师的协同工作,一般来说FPGA部分来完成所有高速接口驱动以及一些高速算法(并行独立或者串行复用),然后ARM部分来完成通信协议的实现,不管是私有的(如用户自定义的串口协议的封包和解包)或者标准的(如TCP/IP或者USB等),以及FPGA的流程控制,错误状态控制还有远程更新控制等。 为了完成上述化学反应,一个很重要的方面就是如何协调ARM和FPGA(都是Zynq片上的资源),这个其实很多开发板的学习手册都已经给出了答案,那就是应用AXI4总线。那剩下的问题就是

用QEMU模拟运行uboot从SD卡启动Linux

社会主义新天地 提交于 2020-08-11 20:53:18
平台:Qemu + vexpress-a9 u-boot:u-boot-2019.10 Linux:linux-4.14.13 之前介绍过用Qemu模拟运行uboot,然后从网络启动linux( 用Qemu模拟vexpress-a9 (三)--- 实现用u-boot引导Linux内核 ),下面介绍用Qemu运行uboot,然后将存放在虚拟出来的SD卡里加载linux kernel、设备树,并运行。 一、编译uboot 下载最新的uboot,编译vexpress-a9: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_ca9x4_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8 得到编译生成的u-boot 二、编译linux内核 cross_compile=arm-linux-gnueabihf- make CROSS_COMPILE=$cross_compile ARCH= arm vexpress_defconfig make CROSS_COMPILE=$cross_compile ARCH= arm

基于SD卡启动裸机程序

微笑、不失礼 提交于 2020-08-11 14:37:37
开发环境说明 表 1 开发板型号 是否支持本实验 TLZ7x-EasyEVM 支持 TLZ7xH-EVM 支持 本文以TLZ7x-EasyEVM开发板为例,核心板SoC芯片型号为XC7Z020,演示使用SD卡启动Zynq裸机程序的方法。 基于SD卡启动的裸机程序主要包含两类,一是ARM(PS端)+FPGA(PL端)的All-Programmable-SoC-demos例程,二是纯PS(不依赖PL端)的Baremetal(NoOS)裸机例程。两类裸机程序的运行都需要依赖FSBL的BOOT.BIN文件和U-Boot的u-boot.bin文件引导,主要区别在于Baremetal(NoOS)裸机例程不包含PL端xxx.bin程序。 从S D卡启动 S oC裸机程序说明 分别参照《基于TcL脚本生成Vivado工程及编译》、《基于TcL脚本生成xsdk工程及编译》文档,编译All-Programmable-SoC-demos例程。 将SD存储卡格式化为FAT32格式,或者直接使用SD系统启动卡的boot分区,SD系统启动卡boot分区即为FAT32格式。将PS端的xxx.elf程序和PL端xxx.bin程序复制到SD卡,另外将BOOT.BIN和u-boot.bin两个文件也添加复制到SD卡。 以光盘"All-Programmable-SoC-demos\tl-axi-gpio-led

【原创】Linux中断子系统(一)-中断控制器及驱动分析

半世苍凉 提交于 2020-08-11 06:00:04
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 从这篇文章开始,来聊一聊中断子系统。 中断是处理器用于异步处理外围设备请求的一种机制,可以说中断处理是操作系统管理外围设备的基石,此外系统调度、核间交互等都离不开中断,它的重要性不言而喻。 来一张概要的分层图: 硬件层:最下层为硬件连接层,对应的是具体的外设与SoC的物理连接,中断信号是从外设到中断控制器,由中断控制器统一管理,再路由到处理器上; 硬件相关层:这个层包括两部分代码,一部分是架构相关的,比如ARM64处理器处理中断相关,另一部分是中断控制器的驱动代码; 通用层:这部分也可以认为是框架层,是硬件无关层,这部分代码在所有硬件平台上是通用的; 用户层:这部分也就是中断的使用者了,主要是各类设备驱动,通过中断相关接口来进行申请和注册,最终在外设触发中断时,进行相应的回调处理; 中断子系统系列文章,会包括硬件相关、中断框架层、上半部与下半部、Softirq、Workqueue等机制的介绍,本文会先介绍硬件相关的原理及驱动,前戏结束,直奔主题。 2.