U-boot移植步骤详解_附:bin文件和所需文件(代码+流程图+遇到的错误及解决办法)

uboot移植步骤 Uboot移植具体步骤(本例子为Samsung origen板) 第一步:准备源码 网上下载现成的uboot开源代码:https://ftp.denx.de/pub/u-boot/ 在该网站中选择与板子兼容的uboot源文件(公司中一般咨询硬件工程师) 在Linux系统下解压 tar xf 压缩包名 第二步:修改源码 1.抄板:将和你板子兼容的文件复制一份文件 cd u-boot-2013.01/board/samsung/ cp origen fs4412 -r 2.直接执行make fs4412, 阅读详情
  S3C2440 的U-Boot移植

 

    按照视频教程,直接使用老大(韦东山老师)提供的补丁文件,直接对下载的u-boot源码打补丁,然后make 100ask24x0_config,就可以编译成功,编译下载就可以在开发板Jz2440上实现U-Boot的各种功能。

   但是要真正自己学会u-boot的移植,能独立修改u-boot源码,移植到另一款开发板上,还是要好好研究移植过程的。

   在学习的过程中,想不使用补丁文件,自己通过修改将u-boot移植到Jz2440开发板上,按照《嵌入式Linux应用开发完全手册》操作后,发现还是存在问题,所以研究了一下,最终实现将U-Boot移植到Jz2440上,到了串口打印输出这一步,暂未实现网卡支持等高级功能。现将笔记整理如下。


一、移植环境

1.u-boot版本1.1.6

2.开发板Jz2440(ARM9       S3C2440

                          NAND       K9F2G08

                          SDRAM     K4S561632 * 2)

3.Linux: ubuntu 9.10


二、U-Boot移植概况

   因为只是为了实验,为了方便的讲述这个过程,解压u-boot后,直接基于smdk2410修改,失败了删除再解压,所以修改文件直接在smdk2410文件夹下修改。如果使用其他开发板,请按照书中做法,新建开发板相关文件夹,这样比较规范。

   没有特别说明,当前文件夹为u-boot-1.1.6根目录。

需要修改的文件及其路径:

文件

路径

start.S

cpu/arm920t/start.S

lowlevel_init.S

board/smdk2410/lowlevel_init.S

smdk2410.c

board/smdk2410/smdk2410.c

speed.c

cpu/arm920t/s3c24x0/speed.c

增加boot_init.c

board/smdk2410/boot_init.c
board/smdk2410/Makefile

s3c24x0.h

include/s3c24x0.h




各文件的作用说明:

     start.S:u-boot启动执行的第一个汇编文件。修改完成堆栈初始化、时钟初始化、SDRAM初始化(只是跳转,具体实现在lowlevel_init.S中)、拷贝代码到SDRAM中。


     lowlevel_init.S:初始化Jz2440板上SDRAM。


      smdk2410.c:
最主要函数board_init(),初始化时钟MPLL、UPLL、FCLK、HCLk、PCLK、GPIO。


      Speed.c:
实现get_PCLK、get_PCLK、get_HCLK、get_PLLCLK等时钟函数,关系到UART等外设。


      boot_init.c:
实现start.S中调用的的两个C函数clock_init(初始化时钟)、CopyCode2Ram(实现从NAND FLASH拷贝代码到SDRAM)


      s3c24x0.h:
各种结构体的定义。
我们需要针对Jz2440开发板增加NAND FLASH的结构体、在S3C24X0_CLOCK_POWER结构体中增加一个成员CAMDIVN。增加一个宏isS3C2410,用于U-Boot自动识别是s3c2410还是s3c2440。

 

三、U-Boot移植操作

           我们先根据书上的指导,完成部分操作,然后根据开发板的实际情况(只有NAND,没有Nor FLASH)进行调整,最后针对遇到的问题,各个击破,从而解决问题。

1.引经据典
     韦东山老师编著的《嵌入式Linux应用开发完全手册》是一部内容详实、通俗明了、非常适合自学的一本书。下面就根据书中提示,开始我们的移植工作。
(1)修改SDRAM的配置
     参考《嵌入式Linux应用开发完全手册》第十五章15.2.5节,修改SDRAM的配置,主要修改lowlevel_init.S(路径:board/smdk2410/lowlevel_init.S)中 REFCNT寄存器的值。将
#define REFCNT 1113
改为
#define REFCNT 0x4f4
        至于为什么这样修改,请参考《嵌入式Linux应用开发完全手册》,里面讲的很透彻。

(2)增加对S3C2440的支持
     由于S3C2440与S3C2410的MPLL与UPLL计算公式不一样,FCLK、HCLK、和PCLK的分频设置也不一样,所以需要修改smdk2410.c
(路径:board/smdk2410/smdk2410.c)中board_init()函数。由于代码太多,再次就不一一贴代码了,请参阅《嵌入式Linux应用开发完全手册》P266页的代码,完全一样。

(3)修改系统获取时钟的函数
     最后一步:获取系统时钟的函数需要针对S3C2410、S3C2440的不同进行修改。
     在后面设置串口波特率时需要获取系统时钟,如果此处没有设置,可能U-Boot启动后串口无输出或工作不正常。所以需要修改speed.c
(路径:cpu/arm920t/s3c24x0/speed.c)中的get_PLLCLK()、get_HCLK()、get_PCLK()这三个函数。代码太多,请参阅《嵌入式Linux应用开发完全手册》P269—P272页,与其一样即可。

    按照书上提示,完成以上三步,编译下载U-Boot就能看见串口有输出。我照着做了,可是很不幸,没有输出。不过没有关系,聪明的读者一眼就能发现问题,书上移植前提是代码在Nor FLASH上,而Jz2440开发板只有NAND FLASH,没有Nor FLASH,也就是说代码是存在NAND FLASH上的,怎么办?请看下一小节。

 

2.系统调整
(1)增加NAND支持
     既然只有NAND FLASH,也就是说U-Boot存在于NAND FLASH上,在U-Boot启动的过程中,需要将U-Boot从NAND FLASH拷贝到已经初始化了的SDRAM中去运行,我们就额外增加一个文件boot_init.c实现读NAND FLASH的功能。文件boot_init.c是韦东山老师为Jz2440编写,主要根据NAND FLASH型号,实现了CopyCode2Ram()函数,将NAND FLASH上数据复制到SDRAM中。
    我们需要做的是,获取boot_init.c文件,放在board/smdk2410/boot_init.c处,并修改该目录下的Makefile(board/smdk2410/Makefile)。
COBJS := smdk2410.o flash.o
改为
COBJS := smdk2410.o boot_init.o flash.o
        然后在start.S(路径:cpu/arm920t/start.S)中修改,以调用CopyCode2Ram()函数,实现代码拷贝。
修改前:
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     stack_setup

        ldr     r2, _armboot_start
        ldr     r3, _bss_start
        sub     r2, r3, r2    /* r2 <- size of armboot */
        add     r2, r0, r2    /* r2 <- source end address */

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
修改后:
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     stack_setup

        ldr     r2, _armboot_start
        ldr     r3, _bss_start
        sub     r2, r3, r2        /* r2 <- size of armboot */
       bl      CopyCode2Ram          /* 调用函数CopyCode2Ram()*/
#if 0
        add     r2, r0, r2       /* r2 <- source end address */

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
#endif
其中红色部分为添加的代码,蓝色部分为注释掉的代码。

(2)修改启动时钟初始化
    在smdk2410的U-Boot启动代码中,第一阶段,start.S中将系统时钟初始化为120MHz,对于Jz2440,我们需要将时钟初始化为100MHz。
初始化函数clock_init()存放于boot_init.c中(board/smdk2410/boot_init.c)。在启动代码中我们调用clock_init()函数即可。在start.S(路径:cpu/arm920t/start.S)中,我们修改如下:
#if 0
    /* FCLK:HCLKCLK = 1:2:4 */
    /* default FCLK is 120 MHz ! */
    ldr    r0, =CLKDIVN
    mov    r1, #3
    str    r1, [r0]
#endif

#ifndef    CONFIG_SKIP_LOWLEVEL_INIT
    bl clock_init
#endif


绿色为预编译注释掉的代码(也就是smdk2410中将时钟设置为120MHz),蓝色是在其后增加的代码,用于调用clock_init()函数,初始化系统时钟。

 

四、疑难杂症
    现在,按照书《嵌入式Linux应用开发完全手册》讲述的操作已经完成,也添加了从NAND FLASH启动的代码,想想 应该是可以了,我们编译试试看。
(1)初步编译
   首先配置u-boot。在u-boot-1.1.6根目录(u-boot-1.1.6#)输入命令make smdk2410_config,回车运行。出现提示:
Configuring for smdk2410 board...
表示配置完成。
   然后编译,输入make命令,回车,开始编译。
出现了一堆错误:
boot_init.c: In function `s3c2440_wait_idle':
boot_init.c:133: error: `S3C2440_NAND' undeclared (first use in this function)
…
boot_init.c:221: error: `isS3C2410' undeclared (first use in this function)
…
make[1]: *** [boot_init.o] Error 1
make[1]: Leaving directory `/home/book/workspace/U-Boot/Jz_u-boot-1.1.6/board/smdk2410'
make: *** [board/smdk2410/libsmdk2410.a] Error 2

     看来还是不行,还有很多问题要解决,下面就根据各种错误进行修改。

(2)S3C2440_NAND未定义
   经过仔细分析,发现一个文件s3c24x0.h (路径:include/s3c24x0.h)中有类似的定义S3C2410_NAND:
/* NAND FLASH (see S3C2410 manual chapter 6) */
typedef struct {
        S3C24X0_REG32   NFCONF;
        S3C24X0_REG32   NFCMD;
        S3C24X0_REG32   NFADDR;
        S3C24X0_REG32   NFDATA;
        S3C24X0_REG32   NFSTAT;
        S3C24X0_REG32   NFECC;
} /*__attribute__((__packed__))*/ S3C2410_NAND;
我们就仿照其定义S3C2440_NAND,在文件s3c24x0.h (路径:include/s3c24x0.h)中增加如下代码:
typedef struct {
    S3C24X0_REG32   NFCONF;
    S3C24X0_REG32   NFCONT;
    S3C24X0_REG32   NFCMD;
    S3C24X0_REG32   NFADDR;
    S3C24X0_REG32   NFDATA;
    S3C24X0_REG32   NFMECCD0;
    S3C24X0_REG32   NFMECCD1;
    S3C24X0_REG32   NFSECCD;
    S3C24X0_REG32   NFSTAT;
    S3C24X0_REG32   NFESTAT0;
    S3C24X0_REG32   NFESTAT1;
    S3C24X0_REG32   NFMECC0;
    S3C24X0_REG32   NFMECC1;
    S3C24X0_REG32   NFSECC;
    S3C24X0_REG32   NFSBLK;
    S3C24X0_REG32   NFEBLK;
} /*__attribute__((__packed__))*/ S3C2440_NAND;


      然后再次make编译,看看还有什么错误。
提示:
boot_init.c: In function `nand_reset':
boot_init.c:221: error: `isS3C2410' undeclared (first use in this function)
boot_init.c:221: error: (Each undeclared identifier is reported only once
boot_init.c:221: error: for each function it appears in.)
……
make[1]: *** [boot_init.o] Error 1
make[1]: Leaving directory `/home/book/workspace/U-Boot/Jz_u-boot-1.1.6/board/smdk2410'
make: *** [board/smdk2410/libsmdk2410.a] Error 2
      原来是isS3C2410未定义

(3)isS3C2410未定义
     还是在文件s3c24x0.h (路径:include/s3c24x0.h)中,在其末尾增加两行宏定义,用于自动识别cpu是s3c2410还是s3c2440:
#define rGSTATUS1       (*(volatile unsigned *)0x560000B0)
#define isS3C2410      ((rGSTATUS1 & 0xffff0000) == 0x32410000)
       添加完毕,再次make编译。出现错误:
speed.c: In function `get_HCLK':
speed.c:123: error: structure has no member named `CAMDIVN'
speed.c: In function `get_PCLK':
speed.c:171: error: structure has no member named `CAMDIVN'
make[1]: *** [speed.o] Error 1
make[1]: Leaving directory `/home/book/workspace/U-Boot/Jz_u-boot-1.1.6/cpu/arm920t/s3c24x0'
make: *** [cpu/arm920t/s3c24x0/libs3c24x0.a] Error 2
提示成员CAMDIVN未定义。

(4)CAMDIVN未定义
     根据提示找到其结构体,发现是s3c2440中引入了一个寄存器CAMDIVN ,s3c2410中没有,所以S3C24X0_CLOCK_POWER中未定义。我们自己加上即可。
修改前:
typedef struct {
        S3C24X0_REG32   LOCKTIME;
        S3C24X0_REG32   MPLLCON;
        S3C24X0_REG32   UPLLCON;
        S3C24X0_REG32   CLKCON;
        S3C24X0_REG32   CLKSLOW;
        S3C24X0_REG32   CLKDIVN;        
} /*__attribute__((__packed__))*/ S3C24X0_CLOCK_POWER;
修改后
typedef struct {
        S3C24X0_REG32   LOCKTIME;
        S3C24X0_REG32   MPLLCON;
        S3C24X0_REG32   UPLLCON;
        S3C24X0_REG32   CLKCON;
        S3C24X0_REG32   CLKSLOW;
        S3C24X0_REG32   CLKDIVN;
        S3C24X0_REG32   CAMDIVN;}
/*__attribute__((__packed__))*/ S3C24X0_CLOCK_POWER;
红色就是我们自己添加的成员CAMDIVN。
    然后再次make。提示:
arm-linux-objcopy --gap-fill=0xff -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
       编译成功!
   然后使用oflash下载到Jz2440开发板。连接好开发板与PC串口,打开串口工具(波特率:115200 8N1),重启开发板,观察串口输出。      
   串口没有输出!!!
   看来还是存在问题,纠结啊!

 

(5)串口无输出
     仔细分析串口文件serial.c(cpu/arm920t/s3c24x0/serial.c)发现没有问题,时钟初始化也没有问题,百思不得其解!
后来从头开始分析,从start.S(路径:cpu/arm920t/start.S)开始,分析u-boot第一阶段启动流程,U-Boot第一阶段启动流程如图1 所示。



流程图1.jpg(50.96 K)
2012-3-2 22:22:38


                                                                                                                         图1 U-Boot第一阶段启动流程
     通过分析,很快就发现了问题所在,在跳转到时钟初始化C函数之前没有设置堆栈!
     由于时钟初始化调用的是C函数clock_init(),根据韦东山老师视频讲解,调用C语言函数之前一定要先设置堆栈!所以调用时钟初始化函数clock_init()一定要先设置堆栈。
     知道了错误所在之处,改起来就方便了,将堆栈初始化的汇编代码调整一下位置,整体移到clock_init()函数之前就行了。
调整后的代码如下:
/*Setup 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 */

#ifndef CONFIG_SKIP_LOWLEVEL_INIT
        bl clock_init
#endif

红色部分为堆栈初始化代码,蓝色部分为时钟初始化代码。调整后的启动流程图如图2所示。

流程图2.jpg(49.76 K)
2012-3-2 22:22:38


                                                                                                                           图2 调整后的U-Boot启动流程
编译烧写,串口终于有输出了!
U-Boot 1.1.6 (Mar  2 2012 - 16:53:23)
DRAM:  64 MB
Flash: 512 kB
*** Warning - bad CRC, using default environment
In:    serial
Out:   serial
Err:   serial
SMDK2410 #

       然后还可以更改串口提示符前缀,修改文件smdk2410.h(路径:include/configs/smdk2410.h)
#define CFG_PROMPT              "SMDK2410 # "
改为
#define CFG_PROMPT              "JZ2440 # "
然后编译烧写,重启开发板,提示符就变了
U-Boot 1.1.6 (Mar  2 2012 - 16:58:35)
DRAM:  64 MB
Flash: 512 kB
*** Warning - bad CRC, using default environment
In:    serial
Out:   serial
Err:   serial
JZ2440 #
JZ2440 #
JZ2440 #


      smdk2410.h(路径:include/configs/smdk2410.h)里面主要是一些配置选项,比如配置开发板MAC地址,配置开发板ip等,具体内容请参阅《嵌入式Linux应用开发完全手册》。

五、总结
    学习Linux是一项非常繁杂的事情,需要了解的知识也很多,出现的问题也是千奇百怪,但是只要我们有足够的耐心,坚忍不拔的毅力,一定可以成为韦东山老师那样的高手。
出现问题,要学会自己分析,尝试自己解决,借用韦东山老师的一句话“遇到问题,自己纠结,痛苦个两三天就明白了”,通过不断的解决问题,我们才能不断积累经验,不断进步。
    在这里和大家分享一下学习方法,我是先看的韦东山老师的视频,然后再看书学习的,感觉这样效果比较好。看视频学到的不仅仅是教你如何操作,还讲解了各种硬件比如LCD、NAND FLASH的各种原理,分析了U-Boot的启动流程,对自己理解非常有帮助,里面还穿插了一些遇到错误的处理办法,很值得我们学习。


 

附件:

移植好的bin文件下载:

u-boot_bin.rar ( 46.56 K, 下载次数:3)


直接通过Jtag烧写即可运行于Jz2440开发板。
移植中涉及的文件(已修改好):

boot_init.rar ( 2.95 K, 下载次数:1)


 

lowlevel_init.rar ( 1.79 K, 下载次数:1)


 

Makefile.rar ( 960 Bytes, 下载次数:1)


 

smdk2410.rar ( 1.9 K, 下载次数:1)


 

s3c24x0.rar ( 4.98 K, 下载次数:1)

 

 

声明:本文为个人原创,边移植边写,完全来自实践。本文首先发表在百问网(www.100ask.net)转载请指明出处。

原文地址:http://www.100ask.net/forum/showtopic-3624.aspx

 

免费视频下载地址:

第1期共33个视频,免费,下载后可以直接观看,下载地址:
http://115.com/folder/fa55184z#
http://dl.dbank.com/c03o1ebwlo
第一期视频从Linux安装开始,讲解了SDRAM、NAND FLASH、LCD等硬件操作,U-Boot的移植、内核移植、简单字符驱动的编写,非常详尽。

第二期视频主要是驱动深入讲解,精华啊!

第二期视频需要收费的哦,具体见韦东山老师淘宝店铺:

http://100ask.taobao.com/

 

书籍资料下载:

《嵌入式Linux应用开发完全手册》及相关资源电炉可以下载:

http://www.verycd.com/topics/2828590/

      嵌入式linux应用开发完全手册光盘里的驱动和例子源代码.rar详情

嵌入式linux应用开发完全手册.pdf详情

 

如果能买一块韦东山老师的开发板,加上视频讲解,加上书,那学起来就太Easy了!

淘宝店铺上http://100ask.taobao.com/全套都有了!!!

 

52、U-boot2023的移植教程 先在u-boot.dis找到函数的链接地址,以此链接地址在u-boot.map中搜索,即可确定是哪个.c文件下的函数被编译。说明:$(libs-y)依赖每个文件夹下的xxx-in.o,而每个文件夹下的xxx-in.o又依赖当前文件夹的所有.o文件。反汇编:arm-linux-gnueabihf-objdump -D -m arm u-boot > u-boot.dis。2、然后找到udevice对应的driver,通过driver中的uclass id得到uclass_driver id。 阅读详情

相关推荐

ZYNQ7000(AX7020)Linux系统移植实战:u-boot编译与启动全解析

本文详细解析了在ZYNQ7000(AX7020)平台上进行Linux系统移植的关键步骤,重点聚焦于u-boot的编译与启动全流程。文章从u-boot在启动链中的核心作用讲起,逐步指导读者完成源码结构解析、交叉编译环境搭建、关键配置修改、最终镜像生成,并详细说明了如何制作ZYNQ7000专属的BOOT.BIN启动文件。最后提供了上板测试的实战命令与常见问题排查思路,旨在帮助开发者快速掌握嵌入式Linux系统引导的完整实践。

qqq44的博客 1013

uboot的移植

uboot移植,适配于阿尔法开发板

qq_39842609的博客 3558

10-U-Boot编译过程详解:三阶段流水线

U-Boot 编译过程包含TPL、SPL、U-Boot Proper三阶段,分别对应极小、中等、完整功能的二进制镜像。通过make rk3506_defconfig配置后,make -j$(nproc)触发三次独立编译:TPL在SRAM中运行,SPL初始化DDR,U-Boot Proper加载内核。产物包括u-boot.bin(裸二进制)、u-boot.img(加Rockchip头的镜像)和u-boot-nodtb.bin(不含设备树)。理解各阶段用途及文件差异,有助于掌握嵌入式启动流程与增量编译技巧。

内核笔记 585

U-Boot移植

uboot移植

mxh3600的博客 4181

手动移植ZynqMP U-Boot与Linux Kernel:摆脱PetaLinux的启动定制实践

嵌入式Linux开发中,ZynqMP等MPSoC芯片的启动流程涉及BootROM、SPL、ATF、U-Boot与内核设备树等多个环节。PetaLinux虽然能快速生成镜像,却易掩盖底层细节。本文从启动原理出发,介绍如何直接基于Xilinx官方源码手动编译U-Boot、内核和设备树,理解DDR初始化与BL31跳转机制。通过SPL+BL31+U-Boot+Kernel的组合,开发者可灵活定制板级启动、快速验证外设驱动,并彻底掌握ZynqMP的启动链路。这一方法尤其适合拥有自研板卡、希望脱离PetaLinux黑盒

weixin_34405557的博客 362

uboot移植详细教程

uboot移植详细教程,建议看完前面几个脚本分析文档,再接下来看uboot。

对韦东山老师移植最新uboot的总结

一:准备移植 1、从下面的官网下载最新的U-boot。用google英文版搜索最新的u-boot源码  ftp://ftp.denx.de/pub/u-boot/ 2、建立sourceinsight工程  a、解压并在E:\colin weidongshan\transplant_u-boot-2012.04.01\u-boot-2012.04.01建立SI  b、添加文件到SI工程

kuangdoushi的专栏 2万+

Windows 下 Codex MCP 服务配置全攻略:从环境搭建到实战避坑

本文详细介绍了在Windows系统下配置Codex MCP服务的完整流程与实战避坑指南。内容涵盖从Node.js环境搭建、Codex CLI安装,到核心配置文件config.toml的编写与解析,并重点解决了Windows平台特有的环境变量设置、MCP服务启动命令适配等关键难点,帮助开发者顺利完成从环境准备到编辑器插件连接的整个配置过程。

weixin_28826545的博客 2069

U-Boot 移植深入

uboot移植深入介绍

安迪西_嵌入式攻城狮 1279

如何使用3D高斯分布进行环境建模

使用3D高斯分布来进行建模,关键在于通过引入不确定性描述来提高建图的鲁棒性和精度。与传统点云表示相比,3D高斯分布提供了一种更为灵活和有效的方式来处理空间数据,能够通过协方差矩阵表示点的空间不确定性,帮助优化SLAM过程中的定位和地图更新。

JaydenQ的博客 2355

SAP交货单增强字段更新实战:手把手教你用BAPI_OUTB_DELIVERY_CHANGE和EXTENSION2参数

本文详细解析了如何使用BAPI_OUTB_DELIVERY_CHANGE和EXTENSION2参数实现SAP交货单增强字段的更新。从增强点SMOD_V50B0001的定位到字段落表的全流程,提供了ABAP代码示例和常见问题排查方法,帮助开发者高效完成交货单自定义字段的集成开发。

weixin_42525637的博客 452

u-boot.bin的生成问题

熟悉u-boot移植到gq2440,下面有个问题一定要注意: 1、解压缩: tar -jxvf /mnt/hgfs/Linux/uboot-2009.08.tar.bz2 -C /home/lj/ 2、进入解压缩包: cd  /home/lj/u-boot-2009.08/ 3、进入board文件夹,由于gq2440和smdk2410是同一种结构,而且大量的寄存器相同

我的未来从这里开始 6856

计算pi小数点后10000位

数据结构课上,老师让我们计算一下pi的10000位,复习一下面向对象。 First Try:定义一个高精度类hp(high precision),实现加减乘除,输入输出,然后随便找一个公式,比如Wallis公式,全都用hp进行计算。 现实是:大数乘大数或者大数除大数,实在是太慢了。而且Wallis公式收敛太慢。 Second Try先找到一个收敛较快的公司:BBP公式,观察公式发现,...

我的技术人生 7394

系统移植-(二)u-boot的部署和移植

u-boot的部署和移植u-boot的部署u-boot的移植(一)准备u-boot源代码(二)u-boot各目录的作用(三)移植uboot u-boot的部署 新的开发板,一切都是空白,需要制作一个SD卡启动盘。 (1)将sd卡启动盘的制作工具拷贝到ubuntu的toolchain目录下,并进入到sdtool目录下 cp /mnt/hgfs/share/sdtool ~/toolchain -...

蒲公英的诗与远方 718

电赛2024年H题智能小车基于MSPM0G3507主控MCU(利用8路灰度加上MPU6050的解决方式)

最后我觉得这个项目最重要的部分还是陀螺仪的精准度,如果一个陀螺仪的精准度高,这个项目就十分简单了,像mpu6050这种陀螺仪精准度就稍微差了一点,他有个最严重的问题就是温漂,偏航角会随着温度变化为变化,这一点在跑发挥项一的时候十分关键的,因为这个只差基督就会导致车子跑偏,导致无法完成 整个项目。如果条件足够的话建议可以换一个好一点的陀螺仪,然后就是灰度如果没有条件同样也可以换成红外。以上就是本次项目的一些小建议。

weixin_60991529的博客 6242

Cadence笔记--原理图导入PCB

根据PCB尺寸画PCB外观尺寸,这里注意X\Y不能超过指定的区域,X\Y的最大值在setuo的grids里设置,画完后保存并关闭工程然后重新打开(不理解为何)由于只画了一个PMU6050,所以这里只有一个器件。工程选择board,选择存储路径和名称。6、重新网格导入,保证网表导入无误;注意网表保存的路径。

weixin_51418325的博客 1958

6.4 U-boot 移植

这里可以看如何下载uboot源码。

Toutiegongzhu的博客 1155

还原 Windows 环境变量的默认值

有时候,我们可能需要还原环境变量的默认值,以修复可能的配置问题或恢复系统的正常运行。如果您只想还原某个特定的环境变量,可以跳过删除其他变量的步骤,仅删除需要还原的变量即可。在“环境变量”对话框中,继续向下滚动到“系统变量”部分。请注意,在执行以下步骤之前,您应该备份当前的环境变量设置,以便在需要时可以还原。在删除所有需要还原的环境变量后,点击“确定”按钮关闭“环境变量”对话框。在“用户变量”部分,选择需要还原的变量,然后点击“删除”按钮。在“高级”选项卡下方的“环境变量”部分,点击“环境变量”按钮。

PvDeveloper的博客 6342

boot_jump_linux函数,U-Boot系列之三: u-boot整体结构、移植步骤以及启动代码分析...

U-Boot系列之三: u-boot整体结构、移植步骤以及启动代码分析[日期:2011-08-05]来源:Linux社区作者:yeshi[字体:大 中 小]本篇文章首先介绍u-boot的整体代码结构,移植的基本步骤,然后分析启动的代码(start.S)中其中代码结构和移植步骤是参考了下面两个连接的文章,作者是 焦玉全 黄乡生 鲍玉军,题目是第7540篇:U-Boot在S3C2410上的移植(具体U...

weixin_35410816的博客 295

LDRA Testbed软件静态分析_常见问题及处理

通过前面的几篇文章,LDRA Testbed软件静态分析的内容基本讲解完了,本篇文章将针对使用Testbed进行软件静态分析的常见问题进行介绍。 到此为止,LDRA Testbed软件静态分析的内容已经全部讲完,如果有问题,欢迎私信提问(不经常登录,回复可能不及时,见谅)。下一篇文章将开始讲解如何使用Testbed进行单元测试。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 2586

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

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

【嵌入式移植】3、编译U-Boot

一起写入arch/arm/dts/.sun50i-h5-nanopi-neo2.dtb.pre.tmp文件中,查看此文件,其最后其一行确实相比arch/arm/dts/sun50i-h5-nanopi-neo2.dts文件增加了一行#include "sunxi-u-boot.dtsi”(此文件同时设置了用于输出u-boot启动过程信息的端口为uart0,波特率115200,对应引脚为PF5、PF6等相关信息)可知yylloc在dtc-parser.tab.c、dtc-lexer.lex.c均存在定义。

TTZZWWW 1737

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

嵌入式linux-系统移植,U-Boot编译,BootLoader介绍,uboot命令,uboot目录结构

文章目录1,Bootloader介绍1.1,什么是Bootloader1.2,Bootloader的特点1.3,Bootloader的操作模式1.4,常用Bootloader介绍1.5,u-boot介绍2,U-boot命令介绍2.1,printenv 显示所有环境变量2.2,setenv 设置新的环境变量2.3,saveenv 将当前定义的所有的环境变量值存入flash中2.4,t...

m0_37542524的博客 2054

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

移植u-boot

u-boot移植

m0_61882925的博客 279

U-Boot 移植(1)

本篇文章对U-Boot的移植进行了介绍,对uboot源码的三种来源进行了说明,并且在韦东山的IMX6ULL开发板上对NXP的uboot进行了编译烧写启动,发现了一些问题

kdxiaojie的博客 783

友善FriendlyARM NanoPi K1 Plus移植之吃上最新u-boot-2019.04

友善FriendlyARM NanoPi K1 Plus移植之吃上最新u-boot-2019.04 首先,参考了网上的一些H5芯片移植教程,使用wiki上提供的分支u-boot源码编译是可以启动这个开发板的,常规的流程 #export ARCH=arm64 #export CROSS_COMPILE=aarch64-linux-gnu- #make nanopi_h5_defconfig #mak...

hht0726的博客 2852

移植u-boot-2009.08到mini2440(一)基础配置篇

该博客主要记录和总结我在工作中遇到的问题和积累的经验。如有错误之处,谢请指正。 共享资源,欢迎转载:http://blog.youkuaiyun.com/fzu_dianzi 一、环境 目标板:mini2440 u-boot版本:u-boot-2009.08 交叉编译器:arm-linux-gcc-4.3.2 操作系统:Linux(Ubuntu-11.10) 二、目的 搭建mini2440

知识为王 3274
上一篇: U-Boot使用loadb下载程序(附测试代码) --基于Linux下Kermit工具
下一篇: U-Boot移植串口xmodem协议_附测试代码
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值