当前位置: 首页 > news >正文

IMX6ULL学习笔记(10)——通过TFTP烧录Linux内核

一、搭建环境

1.1 搭建TFTP服务

通过以下方式完成TFTP网络系统的搭建:

  • 更新APT包
    sudo apt update
  • 安装TFTP服务器端
    sudo apt install xinetd tftp tftpd -y
  • 创建TFTP共享目录
    我这里使用和NFS共同的目录,你们也可以选择自己熟悉的目录
mkdir /home/nfs
sudo chmod -R 777 /home/nfs
  • 编辑指定目录
    sudo vim /etc/xinetd.d/tftp
    添加入下代码
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = /home/nfs
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
  • 重启服务
    sudo /etc/init.d/xinetd restart

1.2 搭建局域网环境

1.2.1 连接到局域网

开发板与电脑接入到同一个局域网中,然后电脑提供TFTP服务,开发板通过TFTP与电脑连接共享文件。电脑生成的目标板应用程序放在TFTP的共享文件夹内,开发板访问该文件夹执行应用程序进行测试。

在另一方面,电脑与开发板通过串口连接,使用串口终端控制开发板。

把虚拟机的网络连接方式改成桥接模式

如果原来Ubuntu通过WIFI获取网络的,需要先把Windows的WIFI关掉,重新使用有线网络。
设置IP地址、子网掩码和网关地址

1.2.2 设置开发板网络

上电快速按回车进入Uboot

设置IP地址、子网掩码和网关地址

setenv gatewayip '192.168.31.1'
setenv netmask '255.255.255.0'
setenv ipaddr '192.168.31.107'
setenv serverip '192.168.31.77'
setenv ethaddr '32:34:46:78:9A:DC'
saveenv
  • 这里的 192.168.31 为局域网IP前缀(局域网的网络地址),要根据你网络情况填写
  • 这里的 255.255.255.0 为子网掩码,一般为255.255.255.0,如不对请联系你们网络管理员
  • 这里的 192.168.31.77 为TFTP服务器的IP,要根据你网络情况填写
  • 这里的 192.168.31.1107 为板子的IP,要设置为一个未被使用的IP,要根据你网络情况填写

1.2.3 互ping测试

连接好网络后在电脑和开发板之间进行互ping测试,以保证网络互通。

开发板ping电脑:

二、将Linux内核烧写到开发板中

将我们编译的 zImage(在arch/arm/boot下) 放到 nfs 目录下

  • SD卡和EMMC板的在uboot下运行如下代码
run args_mmc_old;
tftp 0x80800000 zImage;
load mmc 1:2 0x83000000 /usr/lib/linux-image-4.19.35-imx6/imx6ull-mmc-npi.dtb;
bootz 0x80800000 - 0x83000000;
  • NAND板的在uboot下运行如下代码
ubi part rootfs;
ubifsmount ubi0;
ubifsload 0x84000000 /lib/firmware/fatboot.img;
tftp 0x80800000 zImage;
ubifsload 0x83000000 /usr/lib/linux-image-4.19.35-imx6/imx6ull-nand-npi.dtb;
load ramblock 0:1 0x88000000 /kernel/initrd.img-4.19.35-imx6;
bootz 0x80800000 0x88000000:${filesize} 0x83000000;

三、查看Linux内核版本

cat /proc/version


• 由 Leung 写于 2022 年 10 月 23 日

• 参考:28.3. TFTP网络系统的搭建
    11.4. TFTP烧写Linux内核(SD/EMMC/NAND通用,一般用于测试)

相关文章:

  • 【C++】STL —— String类不会怎么办? 看文档(万字详解)
  • Spring中@Autowired注解实现原理
  • 干货!手把手教你穿透内网
  • 人家网站都免费了,你还用Python去爬?
  • 2023年上半年软考中、高级 了解一下
  • Android 13 新特性及适配指南
  • 分布式事务Seata源码解析十:AT模式回滚日志undo log详细构建过程
  • 链路状态路由协议 OSPF (一)
  • 利用Redis实现分布式长效缓存
  • c# 的一些简单用法
  • 【QT开发专题-天气预报】16.更新 UI 界面
  • D-star算法简介及相关思考
  • Java POI Word 转 PDF
  • DASCTF X GFCTF 2022十月 Misc
  • 10月工作经验总结
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CentOS从零开始部署Nodejs项目
  • HomeBrew常规使用教程
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • python3 使用 asyncio 代替线程
  • SQLServer之索引简介
  • TCP拥塞控制
  • 初识 beanstalkd
  • 飞驰在Mesos的涡轮引擎上
  • 给github项目添加CI badge
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 解决iview多表头动态更改列元素发生的错误
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 自制字幕遮挡器
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (26)4.7 字符函数和字符串函数
  • (NSDate) 时间 (time )比较
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (十) 初识 Docker file
  • (一)appium-desktop定位元素原理
  • (一)基于IDEA的JAVA基础1
  • (转)h264中avc和flv数据的解析
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 指南:抽象化实现的基类
  • .net(C#)中String.Format如何使用
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET单元测试
  • /etc/motd and /etc/issue
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [Android]竖直滑动选择器WheelView的实现
  • [CC-FNCS]Chef and Churu