iMX6ULL学习(一)

2023-11-06

以下部分资料和硬件参考于韦老师的百问网

嵌入式linux启动流程

宏观上:
Windows:BIOS -> 启动windows-> 识别C盘 -> 运行APP
Linux:bootloader(常用u-boot) -> 启动Linux内核(内核本身+驱动程序) -> 识别根文件系统(系统必备APP+用户APP) -> 运行APP

微观上:
Reset(硬件复位) -> ROM(内部只读存储器) -> U-boot(bootloader引导程序,设置环境变量,启动kernel) -> Kernel+dtb(内核+设备树) -> Rootfs(根文件系统) -> APP(系统应用+用户应用/usr/bin/)

编译流程

一个C/C++文件需要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)、链接(linking)才能变成可执行文件。

gcc -E -o hello.i hello.c(预处理,获取文件所需要的库,展开宏定义,.c->.i)
gcc -S -o hello.s hello.i(编译,生成汇编指令,检测语法,.i->.s)
gcc -c -o hello.o hello.s(汇编,生成机器码,.s->.o)
gcc -o hello hello.o(链接生成app,.o->.elf)

下列是gcc指令常用的选项

常用选项 描述
-E 预处理
-c 把预处理、编译、汇编都完成,但不进行链接
-o 指定输出文件
-I(大写i) 指定头文件目录
-L 指定链接时库文件目录
-l(小写L) 指定链接哪一个库文件,如-labc 链接的是libabc.so文件
-v 显示编译细节

#include <…>:工具链所指定的目录LIBRARY_PATH下查找,可通过-I添加路径

链接库的创建使用

(一)、制作和使用动态链接库(.so,share object)

gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
gcc -shared -o libsub.so sub.o sub2.o sub3.o(可以使用多个.o生成动态库)
gcc -o test main.o -lsub -L .(libsub.so所在目录)

运行test前需要把动态链接库libsub.so放到/lib里或者修改环境变量LD_LIBRARY_PATH添加该库的路径。

(二)、制作和使用静态链接库(.a,archive )

gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
ar crs libsub.a sub.o sub2.o sub3.o (可以使用多个.o生成静态库)
gcc -o test main.o libsub.a (如果.a不在当前目录下,需要使用-L指定它的绝对或相对路径)

不需要把静态链接库放到板子上。如果执行arm-linux-gnueabihf-gcc -c -o sub.o sub.c交叉编译需要在最后面加上 -fPIC参数。

开发前基础库下载

sudo apt-get install curl mtd-utils gcc make git vim python net-tools openssh-server
python-dev build-essential subversion
libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext
gfortran libssl-dev libpcre3-dev xlibmesa-glu-dev libglew1.5-dev
libftgl-dev libmysqlclient-dev libfftw3-dev libcfitsio-dev graphviz-dev
libavahi-compat-libdnssd-dev libldap2-dev libxml2-dev p7zip-full bzr
libkrb5-dev libgsl0-dev u-boot-tools lzop
tftp-hpa tftpd-hpa openssh-server git nfs-kernel-server samba
nfs-common -y

各压缩格式操作

tar只是一个打包工具,并不是压缩格式,它能对gzip(tar.gz)和bzip2(tar.bz2)格式进行操作。

(一)、gzip(针对小文件)

  • 解压:tar -zxvf input.tar.gz(-C path 指定解压路径)
  • 压缩:tar -zcvf output.tar.gz output

gzip指令只能压缩单个文件,不能压缩目录

  • 解压:gzip -dk file.gz
  • 压缩:gzip -k file(输出file.gz)

(二)、bzip2(针对大文件)

  • 解压:tar -jxvf input.tar.bz2(-C path 指定解压路径)
  • 压缩:tar -jcvf output.tar.bz2 output

bzip2指令只能压缩单个文件,不能压缩目录

  • 解压:bzip2 -dk file. bz2
  • 压缩:bzip2 -k file(输出file.bz2)

常用的汇编指令

1、LDRB/LDRH/LDR(读内存指令,load register,分别代表读取1/2/4字节数据)
LDR r0, [addrA] r0 = A
2、STRB/STRH/STR(写内存指令,store register,分别代表写入1/2/4字节数据)
STR r0, [addrA] A=r0
3、ADD/SUB(加减指令,add/subtract,不涉及寄存器操作,仅在CPU内部实现)
ADD r0, r1, r2 r0=r1+r2
4、BL(跳转,branch and link,记录返回地址至R14 lr,执行label)
BL label
5、PUSH(出栈指令,等于多次调用STR指令,且减少栈指针R15 sp的值)
PUSH {r3, pc}
6、POP(入栈指令,等于多次调用LDR指令,且增加栈指针sp的值)
POP {r3, pc}

创建线程要素

1、线程控制块
2、栈
3、函数入口

遇到的问题

(一)、error: RPC failed; curl 18 transfer closed with outstanding read data remain

postBuffe太小,需要把它设置大些
git config --global http.postBuffer 524288000

(二)、make all时缺少模块ExtUtils::MakeMaker

请添加图片描述

sudo yum install perl-ExtUtils-MakeMaker

(三)、make all时权限问题

configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
See `config.log' for more details
make: *** [/root/myir/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/build/host-tar-1.29/.stamp_configured] Error 1

export FORCE_UNSAFE_CONFIGURE=1

(四)、makeinfo: command not found

缺少指定的命令,下载texinfo包即可,
sudo yum install texinfo

(五)、虚拟机扩容

进入windows下virtualbox的目录,打开cmd。
1、进入VM VirtualBox目录

cd C:\Program Files\Oracle\VirtualBox\

2、查看已挂载硬盘参数

VBoxManage list hdds

3、输出数据,获取硬盘对应UUID

UUID:           97705cfe-5d0a-4221-9e62-d5f2ab67927f
Parent UUID:    base
State:          locked write
Type:           normal (base)
Location:       D:\virtualmachine\UBUNTU\UBUNTU.vdi
Storage format: VDI
Capacity:       20480 MBytes
Encryption:     disabled

4、给指定硬盘扩容,如扩容至40G。

VBoxManage modifyhd 97705cfe-5d0a-4221-9e62-d5f2ab67927f --resize 40960

5、输出下列信息说明成功。

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

请添加图片描述
6、进入虚拟机,在ubuntu应用界面输入disks,给指定硬盘(如sda1扩容)。
请添加图片描述
请添加图片描述
请添加图片描述

(六)、挂载nfs路径错误

mount: /mnt: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount. helper program.

没有配置nfs,操作步骤如下:
1、在文件/etc/exports下添加需要共享的路径
/home/seanoy *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
2、重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
3、挂载测试(将本机的目录/home/seanoy挂载到目录/mnt处)
sudo mount -t nfs -o nolock,vers=3 127.0.0.1:/home/seanoy /mnt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iMX6ULL学习(一) 的相关文章

  • 我应该使用哪个 Linux 发行版作为 Xen 主机? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我为家庭办公室订购了一台服务器 我想用 Xen 对其进行分区 我认为这将使事情保持干净并且更容易维护 我将运行 MySQL PostgreSQL
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如
  • 进程名称长度的最大允许限制是多少?

    进程名称允许的最大长度是多少 我正在读取进程名称 proc pid stat文件 我想知道我需要的最大缓冲区 我很确定有一个可配置的限制 但就是找不到它在哪里 根据man 2 prctl http man7 org linux man pa
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 为 Linux 安装 R 包时出错

    我试图在 R 3 3 上安装一个名为 rgeos 的包 但是当我输入 install packages rgeos 但它返回给我以下错误 其他包也会发生同样的情况 但不是所有包 gt installing source package rg
  • 如何调用位于其他目录的Makefile?

    我正在尝试这样做 我想打电话给 make Makefile存在于其他目录中 abc可以使用位于不同目录中的 shell 脚本的路径 我该怎么做呢 由于 shell 脚本不允许我cd进入Makefile目录并执行make 我怎样才能编写she
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • 将数组传递给函数名称冲突

    Specs GNU bash 版本 3 1 17 无法升级 Premise 我一直在摆弄数组 我想知道是否有任何方法可以让函数的本地变量与所述函数外部的数组同名 Example 在下面的示例中 我将尝试显示该问题 Working bin b
  • 操作系统什么时候清除进程的内存

    进程在某些操作系统上成功或异常终止 操作系统何时决定擦除分配给该进程的内存 数据 代码等 在退出时或当它想为新进程分配内存时 这个清除内存分配过程在所有操作系统 winXP Win7 linux Mac 上都相同吗 据我了解 页表具有该进程
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • InstaPy:“错误,无法确定 64 位 Linux 的正确文件名”

    有人知道如何解决或解决这个问题吗 来自控制台的堆栈跟踪 执行后报告错误 InstaPy Version 0 6 9 Workspace in use home zanettra InstaPy Error unable to determi
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然

随机推荐

  • DNN结构:CNN、LSTM/RNN中的Attention结构

    前言 attention作为一种机制 有其认知神经或者生物学原理 注意力的认知神经机制是什么 如何从生物学的角度来定义注意力 大多数attention gating 技巧都可以直接加入现有的网络架构 通过合理设计初始化和训练步骤也可以利用现
  • Linux--写时拷贝、内存管理

    目录 1 内存管理 2 写时拷贝技术 1 内存管理 简单分页 逻辑页 物理页 页表 将虚拟内存空间和物理内存空间划分为大小相同的页面 4k 8k 16k等 虚拟内存 在磁盘上划分一块空间 为什么要有逻辑页面和物理页面 物理页面很长 不能确定
  • ubuntu 设置网络代理

    Ubuntu下通过终端设置网络代理 以便apt get等命令可以正常使用 只需在终端里设置http proxy系统变量即可 plain export http proxy http usr name usr password ipaddre
  • 华为云交付项目服务器配置表,云服务器设备配置列表

    云服务器设备配置列表 内容精选 换一换 当您在华为云上部署了弹性云服务器以及其他云服务 想在关联VPC内通过内网域名实现互访 可以为弹性云服务器配置内网域名解析 内网域名可以随意创建 无需注册 只需要保证VPC内唯一 本操作以为弹性云服务器
  • JavaScript设计模式——工厂模式

    在介绍工厂模式之前 首先我们要理解一下什么是设计模式 什么是设计原则 设计模式 通常在我们解决问题的时候 很多时候不是只有一种方式 我们通常有多种方式来解决 但是肯定会有一种通用且高效的解决方案 这种解决方案在软件开发中我们称它为设计模式
  • 字符串的截取

    第二个 开始截取 String orderArr1 order substring order indexOf order indexOf 1 最后一个 开始截取 String orderArr1 order substring order
  • iOS如何提高tableView的性能

    a 重用cell 我们都知道申请内存是需要时间 特别是在一段时间内频繁的申请内存将会造成很大的开销 而且上tebleView中cell大部分情况下布局都是一样的 这个时候我们可以通过回收重用机制来提高性能 b 避免content的重新布局
  • webservice 安全认证请求头信息

    java import java io IOException import java util Enumeration import javax servlet Filter import javax servlet FilterChai
  • 【深度学习

    文章目录 一 前言 二 Computer vision 2 1 Image classification 2 2 Object detection 2 3 Image segmentation 2 4 Depth estimation 三
  • JAVA使用EasyExcel 进行文件的下载

    Spring Boot中使用EasyExcel 进行文件的下载 1 引入依赖
  • Qt中文乱码解决方法

    Qt中文乱码解决方法 一步到位 一 中文乱码解决方法一 1 QString str QStringLiteral 1你好世界 abc 推荐 2 QString str QObject tr 2你好世界 abc 推荐国际化软件使用 其余不推荐
  • Vue3无法用watch监听到通过ref定义的div内容的改变

    源码如下 div设置了contenteditable属性 但是其中的通过ref绑定的数据监听不到变化
  • 【转载】Elasticsearch——QueryBuilder简单查询--模糊搜索

    elasticsearch中存储的全部文档 1 matchAllQuery matchAllQuery 方法用来匹配全部文档 public class QueryTest public static void main String arg
  • 圆的相切相交相离公式_高中数学:直线与圆

    一 直线 1 直线的倾斜角 在平面直角坐标系中 当直线与x轴重合或平行时 规定倾斜角为0 对于与x轴相交的直线 把x轴绕着交点按逆时针方向转到和直线重合时所转的最小正角叫做直线的倾斜角 倾斜角的范围 0 2 直线的斜率 倾斜角不是90 的直
  • 有关eigen库的一些基本使用方法

    矩阵 向量初始化 include
  • hash冲突的4种解决方案

    简介 解决hash冲突 哈希冲突 有以下四种方法 链地址法 再哈希法 建立公共溢出区 开放定址法 法1 链地址法 对于相同的哈希值 使用链表进行连接 HashMap使用此法 优点 处理冲突简单 无堆积现象 即非同义词决不会发生冲突 因此平均
  • 在windows下制作grub2引导的多启动U盘(可启动wepe,安装centos7,debian10等)

    目标 在windows下把一个8GB的u盘制作为grub2引导的多启动U盘 可启动wepe 安装centos7 debian10等 同时支持bios主板和uefi主板 工具准备 a 一个windows 10电脑 b windows 10电脑
  • 要像黑客一样思考,网络安全人员的晋级之道

    学会像黑客一样思考对于任何网络安全专业人士来说都是必要的 这能够让他们更好地理解黑客入侵网络和系统的策略 战术和技术 以及如何保护客户免受此类攻击 为了成为一名有效的安全专业人员 必须能够既具有攻击性又具有防御性的思维 也就是说 必须理解攻
  • QT自定义槽函数

    QT学习 一 QT自定义槽函数 要点 使用举例 一 QT自定义槽函数 要点 槽函数可以是任意的类成员函数 全局函数 静态函数 lambda表达式 隐式函数 槽函数需要与信号相对应 返回值 函数 信号没有返回值 槽函数可以有返回值 举例 vo
  • iMX6ULL学习(一)

    以下部分资料和硬件参考于韦老师的百问网 文章目录 嵌入式linux启动流程 编译流程 链接库的创建使用 一 制作和使用动态链接库 so share object 二 制作和使用静态链接库 a archive 开发前基础库下载 各压缩格式操作