• Ubuntu驱动程序开发6-Linux内核启动与程序烧写


    1 更新uboot到EMMC

    1.1 在uboot中更新uboot

      将编译好的u-boot.imx拷贝到Ubuntu中的tftpboot目录下,然后在uboot命令行下执行以下命令

    mmc dev 1 0 //切换到EMMC分区0
    tftp 80800000 u-boot.imx //下载u-boot.imx到DRAM
    mmc write 80800000 2 32E //烧写u-boot.imx到EMMC中,因为u-boot.imx大小416768字节,416768/512=814个块,有小数的话需要再加1个块。要从SD卡分区第2个块(扇区)开始烧写。
    mmc partconf 1 1 0 0 //分区配置,EMMC 需要这一步!

    1.2 在电脑上通过SD卡更新uboot

    1.1 将imxdown拷贝到工程目录下,也就是和u-boot.bin文件在同一个文件夹下

    1.2 给予imxdownload可执行权限  

    chmod 777 imxdownload

    1.3 电脑中插入sd卡(使用 ls /de/sd*来查看确认sd卡是sd多少)

    ls /dev/sd*

    1.4 烧写bin文件

    ./imxdownload u-boot.bin /dev/sdd

    2 更新内核和设备树文件到EMMC

    可以通过MfgTool来烧写到emmc或sd卡,或者使用uboot下的mmc write指令烧写到emmc或sd卡:

      待补充。

    3 uboot启动Linux的两种启动方式(通过bootz启动)

    3.1 从EMMC启动

    先将zImage文件和设备树文件保存到emmc中,详见第2节。

    mmc dev 1 //切换到 EMMC
    fatload mmc 1:1 0x80800000 zImage //从EMMC读取zImage到DRAM的0x80800000处
    fatload mmc 1:1 0x83000000 imx6ull-14x14-evk.dtb //从EMMC读取设备树到DRAM的0x83000000处
    bootz 0x80800000 - 0x83000000 //启动 Linux

    3.2 从网络启动

    tftp 80800000 zImage  //将tftp文件夹里面的zImage文件下载到开发板DRAM的0x80800000地址处
    tftp 83000000 imx6ull-alientek-emmc.dtb  //将tftp文件夹里面的imx6ull-alientek-emmc.dtb文件下载到开发板DRAM的0x83000000地址处
    bootz 80800000 – 83000000  //启动

    4 uboot启动Linux的两种启动方式(通过boot启动)

    4.1 从EMMC启动

    4.1.1 将zImage和设备树文件保存到EMMC中

      待补充

    4.1.2 设置bootargs和bootcmd环境变量

    setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
    setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000
    imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;'
    saveenv

    4.1.3 启动内核

    boot
    或者
    run bootcmd

    4.2 从网络启动

    setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
    setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
    saveenv
    tftp 80800000 zImage:将tftp文件夹里面的zImage文件下载到开发板DRAM的0x80800000地址处
    tftp 83000000 imx6ull-alientek-emmc.dtb:将tftp文件夹里面的imx6ull-alientek-emmc.dtb文件下载到开发板DRAM的0x83000000地址处

    5、将根文件系统通过NFS挂载

    root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gwip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

    <server-ip>:服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,那就是 Ubuntu 的 IP地址,比如我的 Ubuntu 主机 IP 地址为 192.168.1.250。
    <root-dir>: 根文件系统的存放路径,比如我的就是/home/mk-linux/nfs/rootfs。
    <nfs-options>: NFS 的其他可选选项,一般不设置。
    <client-ip>: 客户端 IP 地址,也就是我们开发板的 IP 地址, Linux 内核启动以后就会使用 此 IP 地址来配置开发板。
    <server-ip>: 服务器 IP 地址。
    <gw-ip>: 网关地址,比如 192.168.1.1。
    <netmask>:子网掩码, 255.255.255.0。
    <hostname>:客户机的名字,一般不设置,此值可以空着。
    <device>: 设备名,也就是网卡名,一般是 eth0, eth1….,正点原子的 I.MX6U-ALPHA 开 发板的 ENET2 为 eth0, ENET1 为 eth1。如果你的电脑只有一个网卡,那么基本只能是 eth0。 这里我们使用 ENET2,所以网卡名就是 eth0。
    <autoconf>: 自动配置,一般不使用,所以设置为 off。
    <dns0-ip>: DNS0 服务器 IP 地址,不使用。
    <dns1-ip>: DNS1 服务器 IP 地址,不使用。
    根据上面的格式 bootargs 环境变量的 root 值如下:

    root=/dev/nfs rw nfsroot=192.168.1.250:/home/zuozhongkai/linux/nfs/rootfs ip=192.168.1.251: 192.168.1.250:192.168.1.1:255.255.255.0::eth0:off


  • 相关阅读:
    HUST 1584 摆放餐桌
    HUST 1585 排队
    HUST 1583 长度单位
    树状数组 poj2352 Stars
    Visual Studio2013应用笔记---WinForm事件中的Object sender和EventArgs e参数
    倒置输入的数 Exercise07_02
    指定等级 Exercise07_01
    检测密码 Exercise06_18
    一年的天数 Exercise06_16
    数列求和 Exercise06_13
  • 原文地址:https://www.cnblogs.com/Mike2019/p/14205687.html
Copyright © 2020-2023  润新知