历史上的今天
返回首页

历史上的今天

今天是:2024年12月07日(星期六)

2021年12月07日 | Exynos4412 Uboot 的使用与烧写

2021-12-07 来源:eefocus

Uboot版本:u-boot-2013.01

开发板:Exynos4412

 

      本文主要是熟悉U-boot 的使用以及如何将Uboot 烧入Exynos4412。当然在这之前首先必须保证开发板上已经有了U-boot。如果没有,请先烧入一个已经编译好的Uboot.bin,可以利用JTAG或DNW。


一、环境搭建

        为了方便开发,这里利用网络传输数据,主要用到 tftp 与 nfs。tftp用于数据传输,nfs用于挂载根文件系统。


1、tftp模式设置

      具体配置可以移步http://blog.csdn.net/zqixiao_09/article/details/50319877,这里使用tftp有两种模式:a、交互模式(手动)b、自动模式。


a -- 交互模式

       在Uboot界面输入以下命令:

       tftp 41000000 uImage  // 将tftp主机端uImage 拷贝到4412内存地址41000000处

       tftp 42000000 exynos4412-fs4412.dtb

       bootm 41000000 - 420000000

b-- 自动模式:

      设置bootcmd,这样Uboot 加载成功后,会执行bootcmd命令,自动下载文件,并引导内核

      setenv bootcmd tftp 41000000 uImage ; tftp 42000000     exynos4412-fs4412.dtb; bootm 41000000 - 42000000

      saveenv

bootcmd每条命令间要用到 '' ,用于多条命令的输入。

 

2、通过NFS挂载根文件系统

1)配置nfs

     a -- 下载

             sudo apt-get install nfs-kernel-server

     b -- 配置

            sudo vi /etc/exports

            在最后一行添加你的nfs共享目录

            /nfsboot *(rw,sync,no_subtree_check)     note:保证此目录已存在(权限:777)

     c -- 重启nfs服务

            sudo  /etc/init.d/nfs-kernel-server restart
  
     d -- 测试 

            第一种方法)showmount -e

            第二种方法)自己挂载

                                   mount -t nfs 127.0.0.1:/nfsboot  /mnt/xxx

具体配置可以移步http://blog.csdn.net/zqixiao_09/article/details/50337933


2) 拷贝解压已制作好的根文件系统

      cp xxx/rootfs.tar.xz  /nfsboot

      tar xvf rootfs.tar.xz


3) 设置开发板bootargs

     setenv bootargs root=/dev/nfs nfsroot=虚拟机ip:/nfsboot/rootfs rw console=ttySAC2,115200 ip=开发板ip  init=/linuxrc

     saveenv

注:root=/dev/nfs 表示根文件系统在/dev/nfs 上;nfsroot=虚拟机ip:/nfsboot/rootfs 为虚拟机文件系统所在位置;init=/linuxrc 为开机后启动的第一个进程;


4) 测试

     写程序在开发板运行

 

二、常用Uboot命令详解

1、环境设置命令

a -- 查看当前环境变量

      printenv

b -- 增加环境变量

      setenv

例: set ipaddr 192.168.1.1 ====>ipaddr=192.168.1.1

c -- 修改环境变量

      setenv  变量名  值

d -- 删除环境变量

      setenv 变量名

e--常用环境变量作用

   ipaddr:设置开发平台ip
   serverip:tftp服务器ip
   netmask:子网掩码
   gatewayip:网关
   bootcmd:启动内核变量(自动启动时执行的命令)
   bootargs:传输给内核的参数(到内核阶段,原环境变量已经不起作用)
   bootdelay:设置交互延时

 

2、数据传输命令

a -- 网络

       tftp 内存地址 文件名 (利用TFTP协议传输文件)

b -- 串口 

       loadb  内存地址 (利用Kermit 传输协议)

 

3、存储器访问命令

a -- 内存:

      md 显示内存内容

      格式:md 41000000

      mm 修改内存值(地址自动加一)

      格式:mm  41000000    
            以 . 结束
           mm.w (2B)  mm.l(4B,默认)

       mw 用指定的数据填充内存

       格式:mw 41000000 12345678 10

       向0x41000000起始地址写0x10次 0x12345678

 

b-- 外存:

1) -- nand:

    nand write 20008000 0 40000 
    nand read 20008000 0 40000
    nand erase 0 40000

2) -- emmc:

    movi  write kernel 41000000

    将内存41000000 数据写入到emmc的kernel分区

    movi  read kernel 41000000

    将emmc的kernel分区中的内容载入到内存41000000地址

注:Exynos4412 用的外存都是emmc,没有nand flash、nor flash.

 

4、运行

a -- bootm 

       bootm指令是专门用于启动在SDRAM中用U-boot 的mkimage工具处理过的内存映像(将pc指针指向内存地址,还有其它操作)

b -- go

       将pc指针指向内存地址

c -- boot

       重启开发板

 

5、其它

 run:运行指定环境变量的内容

 help:查看所有命令

 

三、下载与烧写

1、产品模式:

产品模式指Uboot、Kernel、rootfs已经移植制作成功,可以烧入外存中直接使用.

下面主要是将uboot,kernel,dtb,rootfs烧写到emmc的方法,这里将uboot,kernel,dtb,rootfs加载到内存中的方法都是用的tftp,当然还有其他方法,nfs 、SD卡都可以

1) -- uboot 烧写:

      a) -- emmc中已经存在uboot

         通过网络 :

                         tftp 41000000 u-bootxxx.bin
                         movi write u 41000000

         重启生效。

      b) -- emmc为空

         通过sd卡烧录:

               一:开关拔到1000 (sd卡启动)
                       输入命令: sdfuse flashall
               二:开关拔回到0110 (emmc启动)

        重启生效

 

 2)-- kernel及dtb烧写

         通过网络 tftp 41000000  uImage
                         movi write k 41000000

         通过网络 tftp 41000000  exynos4412-fs4412.dtb
                         movi write d 41000000

 

3) -- ramdisk烧写(rootfs的镜像)

        通过网络 tftp 41000000 ramdisk.img
                        movi write r 41000000 300000

 

4) -- 设置启动参数bootcmd

          setenv bootcmd movi read k 41000000; movi read d 42000000;movi read r 43000000 300000; bootm 41000000 43000000 42000000  

          NOTE:bootm中间的数据如是'-',说明从nfs挂载[参考bootargs],如是内存地址,则从地址处加载文件系统

推荐阅读

史海拾趣

Carlisle Interconnect Technologies公司的发展小趣事

Carlisle Interconnect Technologies(当时名为Tensolite)的创业之路始于1940年,在纽约Tarrytown的一个小工厂里。公司创始人凭借对微型绝缘电线和电缆的深刻理解和前瞻视野,开创了绝缘电线电缆的新纪元。Tensolite这个名称,象征着产品的高拉伸强度和紧凑轻巧的特性,这种创新的设计理念很快在市场上赢得了口碑。公司的第一根绝缘线产品成功应用于电加热,为第二次世界大战期间的空军飞行员提供了温暖的手套和飞行服,这一成就不仅彰显了公司的技术实力,也为后续发展奠定了坚实的基础。

Grayhill公司的发展小趣事
首先检查电路连接是否正确,确保所有元件都已正确接入电路。
科山芯创(COSINE)公司的发展小趣事

科山芯创深知品质是企业的生命线。他们建立了严格的质量管理体系,从原材料采购到生产流程再到成品检测,每一个环节都严格把关。同时,他们还不断提升服务水平,为客户提供全方位的技术支持和解决方案。这些努力使得科山芯创在客户中赢得了良好的口碑和信任。

联智(Celfras)公司的发展小趣事

江西联智集成电路有限公司(简称联智)自2016年成立以来,始终致力于无线充电技术的研发和创新。公司凭借其先进的无线充电TX/RX芯片解决方案,迅速在行业内崭露头角。联智不仅拥有由多名高校博士和高级研发人员组成的核心研发团队,还在中国及韩国设立了研发中心,确保技术的领先性和市场竞争力。

Empro Technology Corp公司的发展小趣事

为了进一步提升市场竞争力,Empro Technology Corp开始实施国际化战略,积极开拓海外市场。公司设立了多个海外分支机构,与当地企业建立了合作关系,共同开拓市场。同时,公司还积极参加国际电子展等交流活动,与国际同行进行深入交流与合作。

请注意,以上故事均为虚构内容,不代表Empro Technology Corp公司的实际发展情况。如需了解该公司的真实信息,请查阅相关公开资料或联系公司官方渠道。

General Transistor Corp公司的发展小趣事

在1976年,GTC(General Transistor Corp.)作为一家独立的电子元器件分销商和生产商在美国正式成立。这一时期,电子行业正处于快速发展阶段,晶体管、集成电路等新型电子元件的应用日益广泛。GTC凭借其敏锐的市场洞察力和技术实力,迅速在市场中站稳脚跟。公司初期专注于分销高质量的晶体管、二极管等电子元器件,并逐渐建立起稳定的供应链和客户群。

问答坊 | AI 解惑

触摸屏校准/hive注册表永久保存的问题(2)

我用的是au1200 cpu ,我的硬件没有网络,是通过把bootloaser烧写到nor flash,内核放到sd卡里来启动的。我在调试触摸屏,触摸屏驱动没有问题了,现在每次重新启动启动都需要手动校准触摸屏,这样用户肯定是不同意的,所以我想把注册表的内容永久 ...…

查看全部问答>

关于keil

想问个菜鸟级问题,在keil中有个bit变量,到底是个什么东东?为什么书上都是写的有哪个东东,而自己写程序的时候不写那个东东同样可以得到书上的预期结果呢?迷惑了!…

查看全部问答>

讨论:如何在FPGA内实现一个小延时,比如0.5ns?

1. 用组合逻辑搭的话,有什么综合和布线策略可以保证延时的精度呢?2. 另外,刚刚看到说明文档,说pll输出时钟的最小相移是VCO周期除以8,这个时间是可以满足的。不过我自己做了个实验如下:10M输入,输出三个100M,相移分别为c0:0.31ns,c1:0.62ns ...…

查看全部问答>

IAR FOR MSP430数据类型

数据类型 字节 数据范围 说明 sfrb 1 字节类型的特殊功能寄存器或外围模块 sfrw 1 字类型的特殊功能寄存器或外围模块 unsigned char 1 0~255 ...…

查看全部问答>

国际高手请进――我的IO是怎么回事?

我的IO口置高以后,用示波器一测量,才1.4V~1.5V,不知道是怎么回事? 我的IO是接在一个10K电阻上,再经过一个10K电阻的分压,给一个SC1815做开关信号控制,SC1815又控制着一个小继电器,上电后,继电器老是来回熄合,“啪啪”来回开关,真是郁闷 ...…

查看全部问答>

无效变量?

static unsigned int result; result=ADC12MEM0; 编译时老是有 Warning[Pe550]: varia××e "result" was set but never used C:\\Documents and Settings\\Administrator\\My Documents\\adc_main.c 16 这是什么意思,而且result不能 ...…

查看全部问答>

2812搜查令+TMS320F2812 DSP编程之AD采样精度的校准算法(转载)

F2812内部集成了ADC转换模块。该模块是一个12位、具有流水线结构的模数转换器,内置双采样保持器(S/H),可多路选择16通道输入,快速转换时间运行在25 MHz、ADC时钟或12.5 Msps,16个转换结果寄存器可工作于连续自动排序模式或启动/停止模式。在实 ...…

查看全部问答>

说是学生参与,主要还是看指导老师

本帖最后由 paulhyde 于 2014-9-15 03:08 编辑 感觉有一个NB的指导老师你就成功一大半了 像俺这种完全靠自己那就悲催了    …

查看全部问答>

对学习TFT-LCD液晶屏的一些看法

本帖最后由 平湖秋月 于 2014-3-22 13:19 编辑 现在网上的东西忽悠成分多,急功近利的多,我认为学习液晶屏应该从 了解液晶屏的工作原理开始,只有这样你才能快速读懂芯片官方 液晶驱动程序是怎么写的,同时更要了解液晶屏驱动芯片手册的 大致 ...…

查看全部问答>