• 嵌入式Linux系统移植——uboot常用命令


    flash的一般分区:

    其它数据
    环境变量
    可执行程序。如bootloader

    print(可缩写为:pri):打印查看uboot这个软件中集成的环境变量
    setenv、saveenv:设置、保存环境变量

    如:
    设置环境变量:    setenv  abc 100
    删除环境变量:    setenv  abc
    保存环境变量到存储器:saveenv  abc 100
    网络层的设置:               setenv ipaddr 10.21.12.10

    nand:
    nand [动词] [内存地址] [nandflash的内部地址] [搬移大小]

    • nand中5M空间的数据读取到内存地址2100 0000

    5M = 5* 1M ,1M = 2^20 = 0x100000

    读数据:nand read 21000000  500000 1024

    • nand把内存地址2100 0000的值写到5M空间

    初始化:nand erase 500000 1024
    写数据:nand write 21000000  500000 1024

    tftp:
    设置、保存本机IP:
    setenv    ipaddr 192.168.9.120
    saveenv ipaddr 192.168.9.120
    设置服务器ip:
    setenv serverip 192.168.9.3
    利用tftp传递文件a.txt 到内存(s5pv210的dram中)地址 20008000上面:tftp   20008000  a.txt    

    Ubuntu14.04环境下配置TFTP服务器

    inux下安装tftp服务端:
    32bit sudo apt-get install tftpd-hpa
    64bit sudo apt-get install tftpf openbsc-xinetd

    bootm:
    bootm传递r0,r1,r2还有bootargs

    bootm 21000000

    bootm 加载linux镜像是加载uImage,uImage是由mkimage制作而来,和zImage的差异是uImage是zImage压缩过的,bootm需要先对uImage解压,解压地址为内核入口地址。当解压完成时uImage和zImage 几乎是相同的,具体差异可以论述。uboot目前只能支持uImage启动,不支持zImage启动

    zImage转换为uImage

    mkimage -A arm -O linux -T kernel -C none -a 20008000 -e 20008000 -n "linux-2.6.36" -d zImage uImage
    go:
    go命令本质就是改变当前pc值

    内核启动条件:内核、启动参数、文件系统
    启动参数:(bootargs)
    root=      启动的根文件系统在哪个设备
    init=       内核启动后第一个可执行文件init进程从哪里来(指定内核启动后,运行的第一个脚本)
    console=    内核启动时,使哪个设备作为控制台

    initrd (boot loader initialized RAM disk),就是由uboot 初始化的内存盘。
    在 linux内核启动前,uboot会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统

    文件系统:内核与用户交互的一个中介

    文件系统的烧写:NFS、Ramdisk

    Ramdisk:内存磁盘

    配置的内容:
    root=/dev/ram
    initrd= 0x22000000,8M    (设备信息(文件系统的基地址,大小))
    init=/linuxrc
    console=ttySAC0
    NFS:网络文件系统(TCP/IP协议  C/S架构)优势:实际调试无需繁杂的复制运行程序

    PC机服务端安装:
    1、搜索 apt-cache  search nfs-
    2、安装 sudo apt-get install nfs-kernel-server
    PC中nfs配置文件:/etc/exports
    (/home/rocky/work/rootfs)       *(rw,sysnc,no_substree_check))  
    //第一列为开放权限的目录        第二列中的*为IP地址,指出要轮询哪些主机访问,*代表任意主机   第二列括号内容为访问服务开启的权限 (可读可写,同步,安全机制)    
    3、重启服务:sudo /etc/init.d/nfs-kernel-server restart
    开发板客户端:
    设置bootargs(客户端根文件位置,NFS服务端共享目录的IP和绝对路径,客户端系统的IP,init console)

    内核启动步骤(Ramdisk文件系统):
    第一步:安装并启动uboot

    第二步:通过tftp服务将内核文件及文件系统分别下载到指定位置
    tftp  20008000 uImage
    tftp 21000000 initrd.img.gz
    第三步:设置启动参数
    setenv bootargs root=/dev/ram initrd=0x21000000,8M  init=/linuxrc console=ttySAC0,115200
    第四步:bootm 20008000 
       至此内核启动完成。

     内核启动步骤(NFS文件系统)

    优势:由于将PC服务端的一个目录链接作为开发板内核的文件系统,所以,可以在PC服务机上编辑调试代码,调试生成的结果会自动更新至开发板客户端系统中

    PC服务端动作:

    第一步:PC服务端安装、配置NFS服务器

    第二步:解压服务端已存在的镜像文件initrd.img.gz 

    第三步:挂载镜像文件到当前镜像所在位置的swap目录下  sudo mount -t ext2  initrd.img  ./swap/

    第四步:进入开放权限的目录将swap目录下的所有内容复制进来。

    sudo cp  -a  /home/rocky/tftpboot/swap/*    ./ 

    目标开发板的动作

    第一步:安装uboot

    第二步:在uboot下设置传递给内核的启动参数bootargs
    setenv bootargs root=/dev/nfs nfsroot=192.168.10.110:/home/rocky/work/rootfs ip=192.168.10.122 init=/linuxrc console=ttySAC0,115200

    第三步:将内核文件加载至指定位置tftp 20008000 uImage

    第四步:启动bootm 20008000

     自动运行:

    uboot环境变量中设置bootdelay、bootcmd
    上电延时:bootdelay=10
    Raddisk文件系统启动内核时
    设置运行时的动作命令:
    bootcmd= nand read 20008000 100000 200000;nand read 21000000 56000000 400000;bootm 20008000

    而NFS文件系统则无法做bootcmd这个指令

  • 相关阅读:
    第13次作业--邮箱的正则表达式
    第11次作业--字符串处理
    第10次作业
    找回感觉的 练习
    《java技术》第十次作业
    《java》技术 第九次作业
    《java技术》第八次作业
    《java技术》第七次作业
    java实验六作业
    第五次实验作业
  • 原文地址:https://www.cnblogs.com/embeded-linux/p/10139959.html
Copyright © 2020-2023  润新知