Im6ull 系统移植之 命令行

news2024/12/23 13:50:39

一 系统移植

系统移植 主要分四个不分由系统启动流程决定

  1. U-Boot的移植
  2.  Linux内核的移植 
  3. 根文件系统的构建
  4. 系统烧写    

1.1 交叉编译环境

交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器, Linaro 是一间非营利性质的开
放源代码软件工程公司, Linaro 开发了很多软件,最著名的就是 Linaro GCC 编译工具链 ( 编译
) ,关于 Linaro 详细的介绍可以到 Linaro 官网查阅。 Linaro GCC 编译器下载地址如下:
https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/ ,打开以后下
载界面如图 4.3.1.1 所示:

安装完验证 

arm-linux-gnueabihf-gcc -v\

1.2 编译 uboot

开发板光盘 ->1 、例程源码 ->3 、正点原
Uboot Linux 出厂源码 -> uboot-imx-2016.03-2.1.0-ge468cdc-v1.5.tar.bz2
添加编译脚本
mx6ull_alientek_emmc.sh
 #!/bin/sh
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  distclean
 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  mx6ull_14x14_ddr512_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  all -j4

运行脚本

chmod a+x  mx6ull_alientek_emmc.sh

./mx6ull_alientek_emmc.sh
编译后目录如下

u-boot.imx 就是我们最 终要烧写到开发板中的 uboot 镜像文件
uboot 编译好以后就可以烧写到板子上使用了,这里我们跟前面裸机例程一样,将 uboot
烧写到 SD 卡中,然后通过 SD 卡来启动来运行 uboot 。使用 imxdownload 软件烧写,命令如
下:
chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可
./imxdownload u-boot.bin /dev/sdd // 烧写到 SD 卡,不能烧写到/dev/sda 或 sda1 设备里面!
等待烧写完成,完成以后将 SD 卡插到 I.MX6U-ALPHA 开发板上,BOOT 设置从 SD 卡启
动,使用 USB 线将 USB_TTL 和电脑连接,也就是将开发板的串口 1 连接到电脑上。打开
MobaXterm ,设置好串口参数并打开,最后复位开发板。在 MobaXterm 上出现“ Hit any key to
stop autoboot: ”倒计时的时候按下键盘上的回车键, 默认是 3 秒倒计 时,在 3 秒倒计时结束以
后如果没有按下回车键的话 uboot 就会使用默认参数来启动 Linux 内核了。如果在 3 秒倒计时
结束之前按下回车键,那么就会进入 uboot 的命令行模式,

比较重要的环境变量 命令使用

bootcmd  bootargs

 加载zImage相关环境变量 这里使用fatload 加载到 mmc 

mmcroot=/dev/mmcblk1p2
内核设备树文件
定义位置

 

这是很多文档没有说明清楚的地方 uboot编译后 加载设备树的路径已经指明 规则因厂商版本可能不同,  在使用 MfgTool烧写自定义zIMage 时 需要匹配好dtb文件名

1.3  搭建烧写网络环境

从网络启动 linux 系统的唯一目的就是为了调试!不管是为了调试 linux 系统还是 linux
的驱动。每次修改 linux 系统文件或者 linux 下的某个驱动以后都要将其烧写到 EMMC 中去测
试,这样太麻烦了。我们可以设置 linux 从网络启动,也就是将 linux 镜像文件和根文件系统都
放到 Ubuntu 下某个指定的文件夹中,这样每次重新编译 linux 内核或者某个 linux 驱动以后只
需要使用 cp 命令将其拷贝到这个指定的文件夹中即可,这样就不用需要频繁的烧写 EMMC
这样就加快了开发速度。我们可以通过 nfs 或者 tftp Ubuntu 中下载 zImage 和设备树文件,
根文件系统的话也可以通过 nfs 挂载,不过本小节我们不讲解如何通过 nfs 挂载根文件系统,这
个在讲解根文件系统移植的时候再讲解。
这里我们使用 tftp Ubuntu 中下载 zImage 和设备树 文件,
1 首先调通板子和ubuntu  P CIE以太网 板子紧靠着串口的一个 (ubuntu 虚拟机网络配置)
setenv ipaddr 192.168.1.113
setenv ethaddr 00:90:F5:F1:6C:87
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.122
saveenv

配置成功

sudo service tftpd-hpa start  (tftp环境配置)

1.4 烧写内核

 copy zImage到 tftp server目录 

chmod 777 zImage

4 zImage 文件下载到开发板 DRAM 0X80800000 地址处
tftp 80800000 zImage

1.5接着烧写设备树   imx6ull-14x14-emmc-4.3-800x480-c.dtb  

而非 imx6ull-14x14-emmc-7-1024x600-c.dtb 

uboot启动信息未看到屏幕信息 

printenv 打印环境变量查看屏幕型号和尺寸 确定设备树文件为

从正点原子出厂固件copy   imx6ull-14x14-emmc-4.3-800x480-c.dtb  到tftp目录

imx6ull-14x14-emmc-4.3-480x272-c.dtb

tftp 83000000 i mx6ull-14x14-emmc-4.3-800x480-c.dtb   
#tftp 83000000 imx6ull-14x14-emmc-4.3-480x272-c.dtb
bootz 80800000 - 83000000

注意修改权限  

VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:  ??

答: 根文件系统缺失错误 

1.6 根文件系统烧写

Linux 内核启动以后是需要根文件系统的,根文件系统存在哪里是由 uboot bootargs 环境
变 量 指 定 , bootargs 会 传 递 给 Linux 内 核 作 为 命 令 行 参 数 。 比 如 上 一 小 节 设 置
root=/dev/mmcblk1p2 ,也就是说根文件系统存储在 /dev/mmcblk1p2 中,也就是 EMMC 的分区 2
中。这是因为正点原子的 EMMC 版本开发板出厂的时候已经 EMMC 的分区 2 中烧写好了根文
件系统,所以设置 root=/dev/mmcblk1p2 。如果我们不设置根文件系统路径 就会出现以上错误;


 

正点原子 mfgTool烧写的出厂系统  uboot日志 

//start kernel

未发现设备树文件日志

但根据环境变量得知

imx6ull-14x14-emmc-4.3-800x480-c.dtb 

bootcmd启动先findfdt 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/744555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode[11]盛水最多的容器

难度:Medium 题目: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 …

enreka使用错误

错误 java.net.UnknownHostException: INVENTORYSERVICE 分析&解决: 这里的请求执行错误 但eureka可以找到服务 手动创建RestTemlate到容器中,未加LoadBalanced注解 加上注解后重试,成功

在linux服务器上的基础操作

1.查看该文件最后两行的记录 tail -n 2 book.txt2.查找文本中的内容 grep info book.txt3.查找内容的上下文本内容 $ grep -C 2 info book.txt

leetcode 701. 二叉搜索树中的插入操作

2023.7.12 比较简单,不多说直接看代码: 迭代法: class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {//树为空的情况if(rootnullptr){TreeNode* node new TreeNode(val);return node;}//需要一个pre节点指向父节…

Echart 数据更新了,X轴或者Y轴显示不变化的问题

应用场景:点击不同的图例,显示不同的X轴或者Y轴的图表 问题:数据打印更新了,Y轴仍然不变。 点第一个legend块,Y轴应该[名称1, 名称2, 名称3, 名称4, 名称5, 名称6, 名称7, 名称8], 点第二个legend块,Y轴应…

C#编码规范

一、 命名惯例和规范 注: Pascal:大小写形式-所有单词第一个字母大写,其他字母小写。 驼峰式:大小写形式-除了第一个单词,所有单词第一个字母大写,其他字母小写。 1:类…

Java 动态规划 Leetcode 213. 打家劫舍 II

代码展示: class Solution {public int rob(int[] nums) {int nnums.length;return Math.max(nums[0]childRob(nums,2,n-2),childRob(nums,1,n-1));}public int childRob(int[]nums,int left,int right){if(left>right){return 0;}int nnums.length;//创建数组i…

Unity基础 物理系统 铰链关节 Hinge Joint

铰链关节是一种模拟物理系统中的连接方式,它允许两个物体围绕一个共同的轴点旋转。这种连接方式可以用于模拟门、摆钟、机器人手臂等各种物理运动。 Connected Body(连接体):这是铰链关节连接的另一个刚体。通过设置这个属性&…

谷歌自研芯片秘辛首次曝光;黑客要价 10 万美元出售雷蛇源代码等数据;百川智能发布 Baichuan-13B大模型(提供源码)

2023年7月12日科技新闻要点!10秒概览! 1.科大讯飞:下半年 all in 星火大模型 2.百川智能发布 Baichuan-13B(源代码和安装及训练教程作为福利在文章最后告诉获取方式) 3.谷歌自研芯片秘辛首次曝光 4.黑客要价 10 万…

第二十五章:InnoDB的数据存储结构

第二十五章:InnoDB的数据存储结构 25.1:数据库的存储结构:页 ​ 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中…

N天爆肝数据库——MySQL(3)

本篇文章,主要对DCL、 函数、 约束和多表查询进行知识总结和学习。 期待和大家一起学习进步。DCL DCL-介绍 数据控制语言,用来管理数据库用户、控制数据库的访问权限。DCL-管理用户 查询用户 USE mysql; SELECT * FROM user; 创建用户 CREATE US…

Overleaf论文投稿

1.Overleaf 具体投稿 一步一步教!!!以Springer Nature为例 2.如何在overleaf上寻找会议或期刊的模板 LaTex期刊模板下载与使用

Mocha Pro 2023 v10.0.2(win/mac)无套路安装教程

Mocha Pro 2023 Mocha Pro是一款世界知名的软件和插件,用于平面运动跟踪、旋转描记、对象移除、图像稳定和PowerMesh有机扭曲跟踪。 Mocha的工具对于视觉效果和后期制作至关重要,在最近每一部获得奥斯卡最佳视觉效果提名的电影中都发挥了重要作用。了解…

天翎MyApps低代码平台案例分享—阿米检测设备管理系统

项目背景:阿米检测技术有限公司(以下简称为“阿米检测”)隶属于中国航天科技集团,是北京航天计量测试技术研究所下属全资公司,2018年由国家财政部正式发文批准成立。司转化航天高端技术,开展测量方法应用、…

【dij变形】牛客练习赛93 C

C-点权_牛客练习赛93 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 重要的是在松弛的时候要满足什么条件才开始松弛 这里是用两个点来松弛一个点 Code&#xff1a; #include <bits/stdc.h>//#define int long longusing namespace std;const int mxn1e510; co…

Android的内存泄漏分析

目录 1、内存详情 1.1、内存溢出 1.2 、内存泄漏 1.3、内存抖动 2、垃圾回收机制 2.1、垃圾回收算法&#xff08;标记--清除&#xff09; 2.2、垃圾回收算法&#xff08;标记--整理&#xff09; 2.3、复制算法 2.4、分代回收算法 3.GCRoot原理 3.1、可达性分析法…

VSCODE 设置同步network Error 问题

前言 这个问题等解决方法如下&#xff1a; 获取到github以及vscode-auth.github.com的ip&#xff0c;添加到host&#xff0c;随后使用命令行刷新host&#xff0c;重新认证即可 第一步&#xff0c;查看log文件&#xff0c; 打开 vscode&#xff0c;使用快捷指令ctrl(command)…

对象池介绍

对象池介绍 对象池是一种常见的优化技术&#xff0c;用于减少游戏运行时的内存分配和垃圾回收。对象池维护了一组已经创建的对象实例&#xff0c;这些对象可以被多次重复使用&#xff0c;而不需要每次都重新创建和销毁。对象池的主要优点是可以减少内存分配和垃圾回收的次数&a…

第一百零四天学习记录:C++核心:类和对象Ⅶ(五星重要)继承下

继承同名成员处理方式 1、访问子类同名成员&#xff0c;直接访问即可 2、访问父类同名成员&#xff0c;需要加作用域 #include<iostream> using namespace std; class Base { public:Base(){m_A 100;}int m_A;void func(){cout << "Base - func()调用"…