Exynos4412 Uboot 的使用与烧写

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],如是内存地址,则从地址处加载文件系统

 

 

你可能感兴趣的:(u-boot,烧写,exynos4412)