U-Boot分析、移植及使用

使用F1C200S从零制作掌机之u-boot移植 除了bootz命令外,有些系统里面还可能存在一个叫做bootm命令,这是是对没有使用设备树内核的镜像启动命令,早期版本的内核没有引入设备树,因此对于早期的内核一般使用的是bootm,其命令格式为bootm内核地址,比如bootm x0x30008000,意思是从0x30008000开始启动内核,启动内核的过程其实是将pc指针指向该地址,这样处理器就会从该地址处运行代码。对于mmc (TF卡)而言,在u-boot有专门的命令load mmc,该命令可以将mmc中的代码从flash搬运到指定的地址处。 阅读详情

优快云仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/03/26/U-Boot分析、移植及使用/#more

该系列主要是为驱动学习提供基石,从0到Qt。本文是该系列的第二篇:对U-Boot进行分析及移植.


1.U-Boot结构分析

Bootloader一般可以分成两个阶段:

  • 第一个阶段通常使用汇编进行必要的硬件初始化,例如:关看门狗、关中断、设置时钟频率、RAM初始化等。除此之外,还要将第二阶段的代码复制到RAM中,设置好栈,然后跳到第二阶段,该阶段主要是与SOC平台相关。
  • 第二阶段一般是用c语言编写,该阶段主要和开发板板载资源相关。该阶段主要初始化后续的硬件,处理内存映射、以及将内核和根文件系统从Flash“搬运”到RAM中运行,然后传入启动参数,最后启动引导内核,完成使命。

Linux中系统一般的分区结构,如下图:

![](https://blog-image-1257972744.cos.ap-chongqing.myqcloud.com/hceng/blog_image/170326/1.jpg)

分区主要分为四个分区:Bootloader、Boot parameters、Kernel、Root filesystem。其中Boot parameters是待传入内核的参数,Kernel即内核、Root filesystem是根文件系统。Bootloader在第一个分区(假设该储存介质为Nand Flash),则在Nand Flash的地址为0x0000 0000,S3C2440上电后,硬件自动把Nand Flash上前4k代码复杂到自己内部RAM中运行。该4k代码先要初始化一些必要的硬件,如看门狗,中断等,然后准备好SRAM,并将后续的代码复制到SDRAM中,再跳到SDRAM中运行,完成Bootloader第一阶段。此时在SDRAM中的第二阶段代码开始工作,首先还是初始化硬件,处理内存映射,把Nand Flash上内核和根文件系统“搬运”到SDRAM准备运行,然后根据用户通过串口传入的启动参数放在Boot parameters,然后内核启动,完成使命。内核启动后,开始去Boot parameters寻找启动参数,根据启动参数做出相应的操作,如:控制台输出、串口波特率、根文件系统位置。


2.U-Boot源码分析

这里根据u-boot-1.1.6的源码进行分析,,主要工作有:

  • 第一阶段的硬件初始化(CPU模式、看门狗、中断)
  • 准备SDRAM
  • 设置堆栈
  • 搬运FLASH中的代码到SDRAM
  • 清除.bss段并跳转至第二阶段
  • 第二阶段的硬件初始化(时钟、串口)
  • 内存映射
  • 根据传入参数启动内核

2.1第一阶段

该阶段的源码在/arch/cpu/arm920t/start.S中:首先进行硬件初始化,包括设置CPU模式,关闭看门狗、关闭中断。这里把时钟配置放在了第二阶段。

  • 设置CPU模式
    把CPU设置为SVC模式,将当前程序状态计数器CPSR的值保存到r0中,利用bic指令清除r0的0x1f并存入r0中,再利用orr指令或运算上0xd3并存入r0,最后r0写回CPSR,这一过程就把CPSR设置为SVC模式:
    {% codeblock lang:asm [start.S]%}
    reset:
    /* set the cpu to SVC32 mode*/
    mrs r0,cpsr
    bic r0,r0,#0x1f
    orr r0,r0,#0xd3
    msr cpsr,r0
    {% endcodeblock %}
  • 设置看门狗和关闭中断
      根据S3C2440的datasheet,将0x00写入pWTCON对应寄存器的地址,完成看门狗的关闭。中断部分也类似,将INTMSK寄存器设置为0xffff ffff即可:
    {% codeblock lang:asm [start.S]%}
    /* turn off the watchdog */

define pWTCON 0x53000000

define INTMOD 0X4A000004

define INTMSK 0x4A000008 /* Interupt-Controller base addresses */

define INTSUBMSK 0x4A00001C

define CLKDIVN 0x4C000014 /* clock divisor register */

ldr     r0, =pWTCON
mov     r1, #0x0
str     r1, [r0]

/* turn off the int */
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
{% endcodeblock %}

  • 准备SDRAM
    start.S中没有初始化SDRAM,而是先跳转到函数cpu_init_crit中,再跳转至lowlevel_init.S中进行初始化SDRAM。adr是一个位置无关指令,将_start的地址读取到r0中,上电后,Flash中的前4k就被拷到S3C2440内部RAM,则这里r0=0。然后再用ldr指令将_TEXT_BASE这个地址(来自链接脚本,代表运行地址)的值放在r1中。然后比较r0和r1的值,如果是相等的,那么证明这个时候代码已经位于了其应该位于的地方,这个时候就不再需要初始化SDRAM去重定位了。如果r1和r0的值不相等,那么将直接跳转cpu_init_crit中。
    {% codeblock lang:asm [start.S]%}
    adr r0, _start /* r0 <- current position of code /
    ldr r1, _TEXT_BASE /
    test if we run from flash or RAM /
    cmp r0, r1 /
    don’t reloc during debug */
    blne cpu_init_crit
    {% endcodeblock %}

{% codeblock lang:asm [start.S]%}
cpu_init_crit:
/flush v4 I/D caches/
mov r0, #0
mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache /
mcr p15, 0, r0, c8, c7, 0 /
flush v4 TLB */

/*disable MMU stuff and caches*/
mrc	p15, 0, r0, c1, c0, 0
bic	r0, r0, #0x00002300	@ clear bits 13, 9:8 (--V- --RS)
bic	r0, r0, #0x00000087	@ clear bits 7, 2:0 (B--- -CAM)
orr	r0, r0, #0x00000002	@ set bit 2 (A) Align
orr	r0, r0, #0x00001000	@ set bit 12 (I) I-Cache
mcr	p15, 0, r0, c1, c0, 0

/*
 * before relocating, we have to setup RAM timing
 * because memory timing is board-dependend, you will
 * find a lowlevel_init.S in your board directory.
 */
mov	ip, lr
bl	lowlevel_init
mov	lr, ip

{% endcodeblock %}

  • 设置栈
      通常为了保存调用C语言时传递参数和保存CPU运行时的现场,需要设置栈,根据定义_TEXT_BASED为代码段的开始地址,然后在代码段的下面留出一段内存实现malloc和全局参数,再留出一点给中断模式的栈和abort异常的栈,剩下的就是栈了:
    {% codeblock lang:asm [start.S]%}
    /* Set up the stack /
    stack_setup:
    ldr r0, _TEXT_BASE /
    upper 128 KiB: relocated uboot /
    sub r0, r0, #CFG_MALLOC_LEN /
    malloc area /
    sub r0, r0, #CFG_GBL_DATA_SIZE /
    bdinfo */

#ifdef CONFIG_USE_IRQ
sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
sub sp, r0, #12 /* leave 3 words for abort-stack */
{% endcodeblock %}

  • 搬运FLASH中的代码到SDRAM
      现在将Bootloader的全部代码复制到RAM中运行:
    {% codeblock lang:asm [lowlevel_init.S]%}
    relocate: /* relocate U-Boot to RAM /
    adr r0, _start /
    r0 <- current position of code /
    ldr r1, _TEXT_BASE /
    test if we run from flash or RAM /
    cmp r0, r1   /
    don’t reloc during debug */
    beq clear_bss

    ldr r2, _armboot_start
    ldr r3, _bss_start
    sub r2, r3, r2 /* r2 <- size of armboot */

    bl CopyCode2Ram      /* r0: source, r1: dest, r2: size */

copy_loop:
ldmia r0!, {r3-r10} /* copy from source address [r0] /
stmia r1!, {r3-r10} /
copy to target address [r1] /
cmp r0, r2 /
until source end addreee [r2] */
ble copy_loop
{% endcodeblock %}

  • 清除.bss段并跳转至第二阶段
      bss段部分保存有静态变量、没有初始化或初始化值为0的全局变量,为了减小体积和防止程序在读取它们时,读取的时上次的值,所以需要先清0:
    {% codeblock lang:asm [start.S]%}
    clear_bss:
    ldr r0, _bss_start /* find start of bss segment /
    ldr r1, _bss_end /
    stop here /
    mov r2, #0x00000000 /
    clear */

clbss_l:str r2, [r0] /* clear loop… */
add r0, r0, #4
cmp r0, r1
ble clbss_l
ldr pc, _start_armboot
{% endcodeblock %}

2.2第二阶段##

第二阶段的代码在lib_arm/board.c中的start_armboot()函数开始,在内部调用各自函数进行设置:

  • 设置时钟
    {% codeblock lang:c [smdk2410.c]%}
    int board_init (void)
    {
    S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
    S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();

    /* to reduce PLL lock time, adjust the LOCKTIME register */
    clk_power->LOCKTIME = 0xFFFFFF;

    /* configure MPLL */
    clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);

    /* some delay between MPLL and UPLL */
    delay (4000);

    /* configure UPLL */
    clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);

    /* some delay between MPLL and UPLL */
    delay (8000);

    /* set up the I/O ports */
    gpio->GPACON = 0x007FFFFF;
    gpio->GPBCON = 0x00044555;
    gpio->GPBUP = 0x000007FF;
    gpio->GPCCON = 0xAAAAAAAA;
    gpio->GPCUP = 0x0000FFFF;
    gpio->GPDCON = 0xAAAAAAAA;
    gpio->GPDUP = 0x0000FFFF;
    gpio->GPECON = 0xAAAAAAAA;
    gpio->GPEUP = 0x0000FFFF;
    gpio->GPFCON = 0x000055AA;
    gpio->GPFUP = 0x000000FF;
    gpio->GPGCON = 0xFF95FFBA;
    gpio->GPGUP = 0x0000FFFF;
    gpio->GPHCON = 0x002AFAAA;
    gpio->GPHUP = 0x000007FF;

    /* arch number of SMDK2410-Board */
    gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;

    /* adress of boot parameters */
    gd->bd->bi_boot_params = 0x30000100;

    icache_enable();
    dcache_enable();

    return 0;
    }
    {% endcodeblock %}

  • 初始化串口
    {% codeblock lang:c [serial.c]%}
    int serial_init (void)
    {
    serial_setbrg ();

    return (0);
    }
    /*

  • Read a single byte from the serial port. Returns 1 on success, 0

  • otherwise. When the function is succesfull, the character read is

  • written into its argument c.
    */
    int serial_getc (void)
    {
    S3C24X0_UART * const uart = S3C24X0_GetBase_UART(UART_NR);

    /* wait for character to arrive */
    while (!(uart->UTRSTAT & 0x1));

    return uart->URXH & 0xff;
    }
    {% endcodeblock %}

  • 监内存映射
      在smdk2410.c里的函数dram_init中设置的内存起始地址为0x3000 0000,大小为0x4000 0000:
    {% codeblock lang:c [smdk2410.c]%}
    int dram_init (void)
    {
    gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
    gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;

    return 0;
    }
    {% endcodeblock %}
      至此,U-Boot的启动过程基本分析完了,在启动U-Boot后,通过lib_arm/armlinux.c中的do_boot_linux来启动内核。这里总结画个图来记录下,中间的顺序可能有点小差异,但大致没问题:

![](https://blog-image-1257972744.cos.ap-chongqing.myqcloud.com/hceng/blog_image/170326/2.jpg)
# 3.U-Boot移植 # 待补充。 # 4.U-Boot使用 # 记录下平时使用U-Boot烧写内核/根文件系统和挂载根文件系统,这里假设如下:

Ubuntu中待作为nfs挂载的路径:/work/hceng/nfs_rootfs
Ubuntu IP:192.168.1.141
开发板 IP:192.168.1.142
网关 IP:192.168.1.1

这里要提前在Ubuntu虚拟机中进行NFS配置,参考上一篇文章中的:2.3安装、 配置网络服务;

启动U-Boot后,迅速按任意键进入U-Boot的下载模式,再输入"q"退出菜单。

  • 设置开发板ip和nfs挂载的服务ip:
    {% codeblock lang:shell %}
    setenv serverip 192.168.1.141 //设置服务器ubuntu ip
    setenv ipaddr 192.168.1.142 //设置开发板ip
    saveenv
    {% endcodeblock %}

  • 设置u-boot各分区大小(内核也要相应设置匹配,在Linux-3.4.2内核中,文件在arch/arm/mach-s3c24xx/common-smdk.c中):
    {% codeblock lang:shell %}
    setenv mtdparts mtdparts=nandflash0:256k@0(bootloader),128k(params),4m(kernel),-(root)
    saveenv
    {% endcodeblock %}

  • 下载、擦除、烧写内核:
    {% codeblock lang:shell %}
    nfs 30000000 192.168.1.141:/work/hceng/nfs_rootfs/uImage
    nand erase kernel
    nand write.jffs2 30000000 kernel
    {% endcodeblock %}

  • 下载、擦除、烧写根文件系统:
    {% codeblock lang:shell %}
    nfs 30000000 192.168.1.141:/work/hceng/nfs_rootfs/fs_mini_mdev_new.yaffs2
    nand erase root
    nand write.yaffs 30000000 4a0000 $(filesize)
    {% endcodeblock %}

  • 根文件系统采用nand启动:
    {% codeblock lang:shell %}
    set bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200
    saveenv
    {% endcodeblock %}
    启动后,对应的NFS挂载:
    {% codeblock lang:shell %}
    mount -t nfs -o nolock 192.168.1.141:/work/hceng/nfs_rootfs /tmp
    {% endcodeblock %}

  • 根文件系统采用nfs启动:
    {% codeblock lang:shell %}
    set bootargs root=/dev/nfs nfsroot=192.168.1.141:/work/hceng/nfs_rootfs ip=192.168.1.142:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
    saveenv
    {% endcodeblock %}

最后启动:
{% codeblock lang:shell %}
boot
{% endcodeblock %}


U-Boot详细分析(3)——系统时钟操作 一、引子 在上一篇文章 U-Boot详细分析(2)——Exynos4412启动过程中可以看到,BL2程序流程图中有SET CLOCK’s这一步骤, 并且在U-Boot源码的 board/samsung/smdkc210/lowlevel_init_SCP.S的文件中也有着对时钟初始化的相关代码(因为BL2中已经初始化,所有不一定会执行) 这篇文章通过U-Boot中对时钟进行初始化的源码和三星提供的... 阅读详情

相关推荐

【正点原子I.MX6U-MINI】U-Boot移植篇(一)什么是UBoot

Bootloader是一个引导加载的程序,指设备通电后负责硬件初始化和操作系统加载的引导程序,并将控制权交给操作系统或者应用程序,确保系统可以正常运行。Bootloader是设备启动过程中第一个运行的软件模块,位于固件(如Flash),它的功能是加载操作系统内核或者主程序,同时完成设备所需的硬件初始化。所以Bootloader是一个通用概念,表示所有负责引导操作系统或者应用程序的程序。

hello_world_juns的博客 1005

U-Boot-时钟初始化

文章目录210电路图总体代码 6410和2440的使用晶振频率为12M,210为24M 210 电路图 设置lock_time 当输入频率改变或频分(乘)值改变时,锁相环需要lock周期。PLL LOCK寄存器指定这个锁定周期,它基于PLL的源时钟。在此期间,输出将处于低状态。 使用初始值即可 设置分频系数 参考U-Boot源码设置 #define CLK_DIV0 0xe0100300 #define DIV_VAL (0x0<<0) | (4<<4) | (4

WillPower 970

Uboot中display移植经验

Uboot初期的clk设置流程 Bootloader启动流程 在Uboot启动的时候,arch/arm/lib/crt0_64.S会调用board_init_f去设置芯片中的一些控制器以及DDR,对于8mp平台是由board/freescale/imx8mp_evk/spl.c提供的board_init_f函数,其中最关键的就是arch_cpu_init(arch/arm/mach-imx/imx8m/soc.c)函数。在最后进入board_init_r选择合适的跳转点。一般这里走的是I...

Muggle的博客 991

Uboot 2017.01 启动流程分析

前言2017.01 UBoot包含两个阶段的启动,一个是SPL启动,一个是正常的启动我们称为第二阶段Uboot。当然,我们也可以选择使用SPL和不使用。 在编译的过程中,是先编译第二阶段Uboot,然后在编译SPL的。这两个阶段的编译时分离的。 拥有不同的配置,所以许多地方的宏是和SPL的不一样。而且链接的文件也不一致。 所以接下来,我们也会分为两个部分进行分析。 SPL启动在AM437X平台中,实

艾玛 2万+

ENVI SARscape安装全攻略:从下载到汉化一步到位(附最新试用申请链接)

本文提供ENVI SARscape从下载安装到汉化的完整指南,特别针对InSAR(合成孔径雷达干涉测量)分析环境搭建。详细介绍了系统要求、分步安装流程、汉化优化方法及硬件加速配置,并分享数据处理验证和常见问题解决方案,帮助用户高效搭建遥感数据分析平台。

rnn9storyteller的博客 1402

树莓派使用 OLED 屏显示图片及文字

树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看。这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片。本文将详细介绍操作方法。 OLED 模组介绍 OLED 屏主要有两种:128×32 和 128×64 ,主要颜色是白、黄、蓝。OLED 屏的特点是功耗低,价格便宜,使用 I2C 接口与主机连接。本文所使用的是 128×64 尺寸的屏幕,外形如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直

码到成功 3742

uboot杂记之时钟分析

在分析初始化时钟代码之前先阅读下2440的datasheet: S3C2440A 中的时钟控制逻辑可以产生几种必须的时钟信号,包括 CPU 的 FCLK,AHB 总线外设的 HCLK 以及APB 总线外设的 PCLK。 S3C2440A 包含两个锁相环(PLL):一个提供给 FCLK、HCLK 和 PCLK,另一个专用于USB 模块(48MHz)。时钟控制逻辑也可以不使用 PLL 来减慢时钟的

longshan_2009的专栏 812

gm/ID设计方法实践指南:从理论曲线到电路优化的关键步骤

本文详细介绍了gm/ID设计方法在模拟IC设计中的实践指南。该方法通过直接利用工艺模型数据,将设计焦点从盲目调整晶体管尺寸转向选择关键的gm/ID工作点,从而在先进工艺下实现功耗、增益和带宽等性能的精准权衡与优化。文章从理论曲线生成到具体电路设计步骤,提供了完整的实战流程。

pandas7gardener的博客 479

U-boot在AT91RM9200上的全线移植分析

  U-boot在AT91RM9200上的全线移植分析 Sailor_forever  sailing_9806@163.com  转载请注明http://blog.youkuaiyun.com/sailor_8318/archive/2007/10/11/1820904.aspx **************************************************

Sailor_forever 6486

01. VBA从入门到精通——录制宏、窗口、快捷键

excel表功能区右击→常用→选择显示开发工具选项→确定Visual Basic:打开VBA窗口宏:查看要录制的宏录制宏:准备录制宏使用相对引用:录制宏的时候对单元格的引用做一个设置宏安全性:对宏的使用做安全设置,一般设置为禁用所有宏,并发出通知,此时打开带有宏代码的工作薄时会出现警告标记,如果宏可信就选择启动。

weixin_43812198的博客 1696

[原创]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式 使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式可以调制发送速率、发包数量、发送天线个数、HT模式、short/long guard interval等等,因此调通Monitor模式是必须的。期间参考了博主沃一德的CSI Tool安装使用讲解,对他的工作表示感...

u014645508的博客 1万+

【u-boot】uboot代码简要分析 (u-boot 移植)

uboot代码简要分析 (u-boot 移植) 2012-12-19 22:46:04 【转】 先来看看源码目录结构,再按照代码的执行顺序简单地分析源码 1.U-boot源码整体框架 源码解压以后,我们可以看到以下的文件和文件夹: cpu 与处理器相关的文件。每个子目录中都包括cpu.c和interrupt.c、sta...

小鱼菜鸟的博客 1061

Maven的下载安装配置教程(详细图文)

目录 一、简单了解一下什么是Maven 二、maven的下载 三、maven的安装 四、maven的环境变量配置 五、setting文件配置 六、开发工具配置Maven 一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。 1.Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型(POM)是一..

bakelFF的博客 12万+

u-boot移植出现nand、mtd命令不能使用

问题背景: 这是我在公司做项目的时候遇到的问题,给公司新CPU平台的设备移植u-boot的时候编译没有错误,但是u-boot运行起来的时候出现nand命令和mtd无法使用。具体错误如下图: 这个错误,网上给出的解决方法如下博客所说: http://www.360doc.com/content/12/1004/22/9072830_239513107.shtml 可是我按照他给出

yang blog 3537

PCL:SAC-IA+ICP配准

【代码】SAC-IA+ICP配准。

m0_71596228的博客 1016

在 VS Code 里配置 SAP Joule for Developers 的 ABAP AI side-by-side 能力

摘要: 随着ABAP开发工具链的演进,VS Code逐渐融入ABAP开发流程,SAP Joule for Developers的ABAP AI能力通过side-by-side模式(基于BTP中央服务)为多系统开发提供统一AI支持。该模式避免了各ABAP后端独立升级AI能力的碎片化问题,由管理员配置BTP订阅URL后,开发者可在ADT或VS Code中全局调用。实际落地需注意角色分工(管理员配置服务,开发者填写URL)、AI units资源规划及配置细节(如区分全局与项目级设置)。建议将Joule URL纳入

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 120

18.17 U-Boot+内核移植

18.17.1 移植U-Boot-2012.04.08 1.下载、建立source insight工程、编译、烧写、如果无运行分析原因。 $ tar xif u-boot-2012.04.01.tar.bz2 $ cd u-boot-2012.04.01 $ make smdk2410_config $ make ERROR【错误原因:gcc版本低】 $ arm-linux-gcc -v [g...

素师良码 186

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

U-boot源代码全分析系列(基于PowerPC)

一、概述     U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目,是从FADSROM、8xxROM、PPCBOOT逐步发展演化而来的。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅仅支持嵌入式Li

qingfengtsing的专栏 3103

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

u-boot2020.04移植(支持网络)

前面基于goni这块板子移植的u-boot并不支持网络,但是我的开发板上面是支持网络的,所以这里把网络支持添加上。先看一下硬件是怎样接的: DM9000属于类内存总线的设备,被映射到s5pv210的SROM区域,从图上可以知道它接在SROM的bank1,CMD接在ADDR2。从前面的过程分析我们知道,网络相关的初始化在board_init_r阶段,有两个相关的函数,下面来看一下: /*common/board_r.c*/ /*这个函数主要的作用是设置mac地址,但u-boot提供了可以随机 生成mac地

漫长当下 805

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【正点原子FPGA连载】第十二章U-Boot移植 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html上一章节我们讲解了uboot的使用,对uboot有了一个初步的了解。前两章我们都是使用的正点原子提供的uboot,本章我们就来学习如何将Xilinx官方的uboot移植到正点原子的ZYNQ MPSoC开发板上,学习如何在ub

weixin_55796564的博客 1246

U-Boot移植_DDR3移植

U-Boot移植_DDR3移植 在系统上电后,CPU并不知道外部的RAM是什么类型的存储器,因此U-Boot需要对CPU进行RAM初始化设置,然后将程序拷贝到RAM中运行。 本系统采用的RAM是DDR3类型存储芯片,容量是4GB,频率是1066KHz;系统从eMMC中启动。采用的是U-Boot-2009版,linux3.0.35系统内核,U-Boot对DDR3的配置在board/max6q/f

嵌入式Linux底层开发专栏 5468

zynqMP u-boot、linux kernel、rootfs移植(非petalinux)

还有一些特殊的配置,例如文件在flash中的分配,在linux下使用dd命令更新时也能知道该往哪个分区下载。配置完成后执行make,进行编译。如果在编译过程中遇到有编译错误,可以在。

qq_39299837的博客 2611

mini2440 u-boot linux 内核启动,mini2440之U-Boot使用及移植详细手册

管理提醒:本帖被 mindee 设置为精华(2011-01-03)第1章BOOTLOADER的概念与功能41.1嵌入式LINUX软件结构与分布41.2在嵌入式LINUX中BOOTLOADER的必要性41.3BOOT LOADER的功能和选择5第2章U-BOOT简介62.1U-BOOT的起源62.2...

weixin_42318712的博客 294

U-Boot移植过程中的关键目录文件解析

qq_28576837的博客 1218

系统移植第一天

无

Pointerup的博客 3670
上一篇: 搭建嵌入式Linux开发环境
下一篇: 终端复用软件-Tmux
hceng_blog
博客等级 码龄10年 263粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值