找回密码
 立即注册
首页 业界区 业界 搭建imx6ull环境--tftp加载镜像,nfs挂载根文件系统 ...

搭建imx6ull环境--tftp加载镜像,nfs挂载根文件系统

愤血冒 昨天 07:12
1.环境介绍

开发板:野火imx6ullPro邮票孔EMMC
主机:Win11
虚拟机:virtualbox
虚拟机版本:Ubuntu20.04
Windows远程连接虚拟机
由于这个板子比较老,野火提供的虚拟机是基于18.04的这个版本不再支持vscode环境,于是就想着开始学习驱动从头到尾先搭建一下环境,中间也是折腾了很久,所以都记录一下
环境:
准备从SD卡加载uboot,通过tftp从Ubuntu中加载内核镜像,设备树,并通过nfs将根文件系统挂载到Ubuntu上
开发板直连电脑,虚拟机通过NAT连接无线网卡,保证虚拟机可以连接外网,桥接有线网卡,让有线网卡、Windows、开发板在同一局域网内
vscode通过SSH远程连接虚拟机,在Windows环境下开发比较舒服
2.虚拟机环境搭建,并配置SSH连接

可以看我这篇博客
创建虚拟机并配置远程环境
3.uboot编译

3.1源码下载
  1. #环境下载
  2. sudo apt install make git gcc-arm-none-eabi gcc bison flex libssl-dev dpkg-dev lzop libncurses5-dev
  3. #直接克隆野火提供的仓库
  4. git clone -b ebf_v2020_10_imx https://gitee.com/Embedfire/ebf_linux_uboot --depth 1
复制代码
3.2编译uboot


  • 创建编译内核脚本
  1. touch build_uboot.sh
  2. chmod 0777 build_uboot.sh
复制代码

  • 向文件中写入如下内容
  1. make distclean
  2. make ARCH=arm CROSS_COMPILE=arm-none-eabi- mx6ull_fire_mmc_defconfig
复制代码

  • 查看生成的固件
  1. ls u-boot-dtb.imx
复制代码
3.3烧录uboot


  • sd卡插到读卡器上,挂载到Ubuntu上
    1.png

设备名称可能不一样,可以插拔读卡器看一下变化的是哪个,哪个就是我们的读卡器

  • 查看Ubuntu上挂载的分区,输入lsblk
    2.png

一般不会是sda,根据自己情况确定

  • 进入uboot源码目录,执行如下命令
  1. sudo dd iflag=dsync oflag=dsync if=u-boot-dtb.imx of=/dev/sdb seek=2
复制代码

  • 取下设备将SD卡插入开发板就能看到uboot启动了
4.网络环境搭建

开发板,主机和虚拟机可以通过网线通信,需要设置三者有共同的网关和掩码,三者在同一网段的不同ip
操作之前关闭电脑所有电脑管家以及防火墙
4.1Windows网络配置


  • 打开控制面板->网络和Internet->网络和共享中心->更改适配器设置,找到我们的有线网卡
    3.png

  • 右键属性->Internet协议版本4(TCP/IPV4)
    4.png

可随意配置网段,只要保证三者在同一网段即可,不懂得可以按照我的配置
4.2Ubuntu网络配置


  • Ubuntu关机,添加网卡选择桥接模式,桥接的网卡一定是上边配置的有线网卡名字
    5.png

  • 进入虚拟机网络配置
    6.png

  • 配置网络
    7.png

  • 验证网络
    虚拟机终端输入ifconfig,查看是否有我们配置的网络
4.3开发板网络配置

开发板进入uboot,输入如下命令
  1. setenv ipaddr 192.168.100.30
  2. setenv ethaddr 00:04:9f:04:d2:35
  3. setenv gatewayip 192.168.100.1
  4. setenv netmask 255.255.255.0
  5. setenv serverip 192.168.100.30  
  6. saveenv
复制代码
分别是ip地址,mac地址,网关,掩码,虚拟机ip,保存环境变量
验证能与虚拟机跑通
  1. ping 192.168.100.30
复制代码
显示如下即可
8.png

5.kernel编译

5.1源码下载
  1. #环境下载
  2. sudo apt install  gcc-arm-linux-gnueabihf
  3. #直接克隆野火提供的内核仓库
  4. git clone -b ebf_4.19.35_imx6ul https://github.com/Embedfire/ebf_linux_kernel.git --depth 1
复制代码
5.2编译内核


  • 编译脚本
  1. #进入内核后执行
  2. touch build_kernel.sh
  3. chmod 0777 build_kernel.sh
复制代码

  • 向build_kernel.sh中写入
  1. #清除编译
  2. make mrproper
  3. # 编译内核
  4. make ARCH=arm npi_v7_defconfig
  5. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j3
复制代码

  • 查看内核和设备树
  1. #应该会出现这两个文件,记住这两个文件位置
  2. ls arch/arm/boot/zImage
  3. ls arch/arm/boot/dts/imx6ull-mmc-npi.dtb
复制代码
6.tftp加载内核和设备树


  • 安装环境
  1. sudo apt-get install tftp-hpa tftpd-hpa  
  2. sudo apt-get install xinetd
复制代码

  • 创建目录
  1. cd ~
  2. mkdir tftp
  3. chmod 0777 tftp
复制代码

  • 配置TFTP
  1. sudo vim /etc/xinetd.d/tftp
  2. # 输入如下内容,路径根据自己的来,要绝对路径
  3. server tftp
  4. {
  5.     socket_type    = dgram
  6.     protocol       = udp
  7.     wait           = yes
  8.     user           = root
  9.     server         = /usr/sbin/in.tftpd
  10.     server_args    = -s /home/wanderpurr/tftp/
  11.     disable        = no
  12.     per_source     = 11
  13.     cps            = 100 2
  14.     flags          = IPv4
  15. }
复制代码

  • 重启TFTP服务
  1. sudo service tftpd-hpa start
复制代码

  • 重置服务器
  1. sudo vim /etc/default/tftpd-hpa
  2. # 修改成如下内容,路径还是按自己的来
  3. TFTP_USERNAME="tftp"
  4. TFTP_DIRECTORY="/home/wanderpurr/tftp"
  5. TFTP_ADDRESS=":69"
  6. TFTP_OPTIONS="-l -c -s"
复制代码

  • 重启TFTP服务
  1. sudo service tftpd-hpa restart
复制代码

  • 将上边我们编译生成的内核镜像和设备树拷贝到我们的tftp目录
  • 修改内核和设备树权限为777
  • 测试加载镜像,在uboot中输入如下内容重启
  1. setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-mmc-npi.dtb; bootz 80800000 - 83000000'
  2. saveenv
复制代码
重启后会看到如下
9.png

后面会启动内核,但缺少根文件系统会启动失败
7.根文件系统编译


  • 下载源码安装环境
    源码可以去官网下载即可busybox官网,根文件系统不向内核和uboot有很多板级配置需要向供应商所要指定版本
    安装环境
  1. sudo apt-get install zlib1g-dev unzip gcc g++ aptitude lib32stdc++6-4.8-dbg build-essential libncurses5 libncurses5-dev u-boot-tools traceroute  gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
复制代码

  • 配置根文件系统
  1. make  ARCH=arm  CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
复制代码
配置如下操作

  • Settings -> Build static binary (no shared libs)   勾选上
  • Linux System Utilities->mdev                              勾选上
  • Settings -> vi-style line editing commands         勾选上
  • Linux Module Utilities  -> Simplified modutils     取消勾选

  • 编译
  1. make  ARCH=arm  CROSS_COMPILE=arm-linux-gnueabihf-
  2. #指定安装路径为家目录下rootfs
  3. make  ARCH=arm  CROSS_COMPILE=arm-linux-gnueabihf-  CONFIG_PREFIX=/home/wanderpurr/rootfs  install
复制代码

  • 补全缺失文件
  1. cd ~/rootfs
  2. mkdir dev etc lib var proc tmp home root mnt sys
  3. cd ./dev
  4. sudo mknod console c 5 1
  5. sudo mknod null c 1 3
  6. cd ../etc
  7. echo console::askfirst:-/bin/sh > inittab
复制代码
8.nfs挂载根文件系统

上边已经将根文件系统制作好了,下面来通过网线挂载起来

  • 安装环境
  1. sudo apt-get install nfs-kernel-server rpcbind
复制代码

  • 添加根文件系统
  1. sudo echo "/home/wanderpurr/rootfs *(rw,sync,no_root_squash,no_subtree_check)"  >> /etc/exports
复制代码

  • 重启nfs
  1. sudo /etc/init.d/nfs-kernel-server restart
复制代码

  • 修改uboot参数
  1. #板子IP,虚拟机IP以及根文件系统路径根据自己的配置好
  2. setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.100.30:/home/wanderpurr/rootfs,proto=tcp,nfsvers=4 rw ip=192.168.100.50:192.168.100.30:192.168.100.1:255.255.255.0::eth0:off'
  3. saveenv
复制代码

  • 重启开发板
    10.png

这里就配置结束了,我们开发板的根目录就是虚拟机的rootfs目录,这样传输文件就非常方便了
结语

配置过程中可能出现很多问题,我断断续续搞了一周,但每填一个坑都是对自己的一种成长
参考:
这个写的非常全,有需要从头自己配置的可以参考一下这个,但注意他bootargs最后网口挖了坑,让我找了好几天
i.MX6ULL开发板uboot/kernel/rootfs移植傻瓜教程【建议收藏】-电子工程专辑
以及野火官方文档
[野火]嵌入式Linux镜像构建与部署——基于LubanCat-IMX8MMini开发板 — [野火]嵌入式Linux镜像构建与部署——基于LubanCat-i.MX8MMini开发板 文档
有问题欢迎留言

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册