韦东山嵌入式Liunx入门笔记一

news2025/1/17 0:23:05

文章目录

      • 一、嵌入式Linux
      • 二、Ubuntu系统
        • 2-1 安装软件
        • 2-2 Linux文件
          • (1) 文件架构
          • (2)文件属性
          • (3)文件命令
          • (4) 解压、压缩文件
          • (5) 网络命令
        • 2-3 vi编辑器
        • 2-4 Ubuntu下包管理
      • 三、配置网卡
      • 四、安装后续学习使用的软件
        • 4-1 MobaXterm
        • 4-2 FileZilla
        • 4-3 Source Insight4.0
        • 4-4 下载BSP
        • 4-5 配置交叉编译工具链(极其重要)
      • 五、IMX6ULL Pro开发板
        • 5-1 基本介绍
        • 5-2 开发板挂载Ubuntu 的NFS目录(极其重要)
        • 5-3开发板使用TFTP服务传输文件(很少用)
      • 六、开发板第一个APP实验
      • 七、开发板第一个驱动实验
        • 7-1 编译内核和模块
        • 7-2 编译led驱动
      • 八、构建bootloader、内核、文件系统(都可跳过)

本人学习完韦老师的视频,因此来复习巩固,写以笔记记之。
看完视频复习的同学观看最佳!
基于 IMX6ULL-PRO
参考视频 Linux快速入门到精通视频
参考资料:01_嵌入式Linux应用开发完全手册V5.1_IMX6ULL_Pro开发板.pdf

一、嵌入式Linux

在这里插入图片描述
1-1 获取资料
(1)IMX6ULL-PRO网盘资料
(2)使用Git获取资料(重要—后面所用的pdf都在里面)
Git使用教程
下载Git,启动 Git Bash,切换到自己的创建的文件目录;克隆,从远程下载仓库。

git clone https://e.coding.net/weidongshan/01_all_series_quickstart.git

在对应的01_all_series_quickstart目录下即可更新仓库

git pull origin

BSP(Board Support Package ),指板级支持包,是构建嵌入式操作系统所需的引导程序(Bootload)、内核 (Kernel) 、根文件系统 (Rootfs)和工具链(Toolchain)。

二、Ubuntu系统

2-1 安装软件

(1) 安装VMware,建议安装Vmware Workstation Pro,网上搜索破解即可。
(2) 将Ubuntu映像文件导入即可,建议使用Vmware Workstation Pro(也可根据参考资料的文件步骤安装),建议使用韦老师文件里的系统“Ubuntu 18.04_x64.vmx,不然后面有很多错误,引起不便。
(3) Ubuntu是包含了GUI的Linux发行版,有用户界面显示,可以用鼠标点击,但还是推荐以后在终端使用命令行的操作方式。使用快捷方式Ctrl+Alt+T 打开终端,建议学习,会打开无数次的终端,这样更加便捷快速。

2-2 Linux文件
(1) 文件架构

Linux系统所见皆文件,遵循FHS标准(Filesystem Hierarchy Standard 文件系统层次标准)。
在这里插入图片描述
/dev: 设备文件,Linux特有;/etc: 配置文件;/boot:启动文件,Linux内核
/home/book:平时你打开终端的时候,用户所处的位置,可以pwd指令进行查看当前文件路径
在这里插入图片描述

(2)文件属性

在这里插入图片描述
ls -al:列出当前目录下的内容,-a all,列出全部文件(包括隐藏的);-l 选项 以列表的形式展示内容,显示更多的信息。

第一个字符代表文件类型,d代表目录文件。其余类型字符如下图所示
在这里插入图片描述
其后九个字符,每三个分为一组。 第一组表示 “u文件所有者的权限”;第二组表示“g用户组的权限;第三组表示 o其他非本用户组的权限 。r代表可读,w代表可写,x代表可执行。其后的数字2代表硬链接的个数。book代表所有者,Dengzj代表所属组。然后依次是文件的大小、创建/最后修改的时间、文件名等信息。
在这里插入图片描述
book: 用户名;Dengzj:主机名;root: 超级管理员
执行权限不够时,即禁止访问,可sudo -i 切换到root用户进行执行命令。

(3)文件命令

首先,最常用按键Tab(命令补齐),一定要学会使用,能减少需多打字时间。
常用命令:创建文件mkdir;复制文件cp;移除文件rm;切换文件路径cd; 列出文件目录ls; 移动文件mv; 查看网络配置信息ifconfig; 回到用户目录cd; 查看文件内容cat; 查找命令 find -name;
补充:grep命令:从文件中通过关键字过滤文件行; 管道符| 将管道符左边命令的结果,作为右边命令的输入。
查看hello.c文件里的内容作为结果,查看printf相关的文件行。
在这里插入图片描述

(4) 解压、压缩文件

z :使用 gzip 方式进行处理,它与” c “结合就表示压缩,与 x “结合就表示解压缩。
-j :使用 bzip2 方式进行处理,它与” c “结合就表示压缩,与 x “结合就表示解压缩。
-f(file) file):表示文件,后面接着一个文件名。 C < 指定目录 > 解压到指定目录。
下面以-j为例,进行说明。
压缩,文件hello.c 压缩、打包为hello.tar文件

tar cjvf hello.tar hello.c 

在这里插入图片描述
解压hello.tar文件

tar xjvf hello.tar //解压到当前目录

在这里插入图片描述

(5) 网络命令

查看网络、设置IP

ifconfig

查看是否能上网

ping www.baidu.com

建议参考固定静态IP地址配置静态ip地址,不然以后文件传输每次都要重新操作。

2-3 vi编辑器

现常用vim编辑器,给出以后(如查看man手册、修改设备树)常用的指令。
三种模式:命令模式、文本模式、末行模式
1、进入编辑器后,呈现的是命令模式
删除指定行,光标移至当前行,按dd;多行,数字+dd
复制yy;多行,数字+yy
跳转文件首行gg;行尾G
撤销u(返回上一步操作);反撤销Ctrl + r
查找命令模式下按**/待查找的关键字** 使用n依次遍历
2、切换文本。按下i(我常用这个按键)、a、o即可到文本模式
此时,可以进行正常文本编写;Esc退回到命令模式
3、在退回到命令模式,输入:即进入末行模式,通常是保存文件并退出
:wq 保存文件并退出
:q! 当访问了文件又不小心修改了,可以强制退出并不做修改
:sp 横屏分
:vsp竖屏分 Ctrl + ww切换屏幕光标

Linux基本命令,参考黑马程序员系统编程

2-4 Ubuntu下包管理

Ubuntu系统中下载软件使用APT 下载工具可以实现软件自动下载、配置、安装二进制或者源码的功能。
首先,需要更换软件源,选择国内的即可
在这里插入图片描述
在这里插入图片描述
更新软件包

apt-get upgrade

安装的软件包

apt-get install packagename

卸载软件包

apt-get remove packagename

三、配置网卡

这一章节即需要使用到开发板,达到三者(Windows、Ubuntu、开发板)互相ping通的目的。
NAT 网卡: Ubuntu 通过它上网,只要Windows能上网,Ubuntu就能上网。
桥接网卡: Ubuntu 通过它跟开发板连通。
NAT(Network Address Translation)指网络地址转换 。 Ubuntu 要访问外网,是委托 Windows 发出数据包,Windows接收到回应后再转发给 Ubuntu 。外界看到的都是 Windows 看不到 Ubuntu 。
使用桥接网卡时 Ubuntu 使用真实的网卡 :开发板的网线也连接到这个真实的网卡上,这样 Windows 、 Ubuntu 、开发板就都可以用过这个网卡互通了。

如何配置,参考视频即可。

四、安装后续学习使用的软件

在这里插入图片描述

4-1 MobaXterm

连接开发板串口,便于操作,(个人喜欢使用虚拟机操作Linux,未连接到这个软件上)

4-2 FileZilla

Windows和虚拟机之间传输文件

4-3 Source Insight4.0

需要破解,可私聊获得。用于阅读Linux源码和后续课程编写程序
注:载入Linux源码需要一定时间,建议使用吃饭时间

4-4 下载BSP

获得Linux 4.9.88源码,传回给Widows,配置给Source Insight4.0可阅读源码。

4-5 配置交叉编译工具链(极其重要)

交叉编译工具链用来在Ubuntu 主机上编译应用程序,而这些应用程序是在ARM 等其他平台上运行。
设置交叉编译工具主要是设置PATHARCHCROSS_COMPILE 三个环境变量。
打开配置文件,并末尾添加即可。

vim ~/.bashrc
export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

设置完毕后,要执行

source ~/.bashrc

验证,输入arm-bu后按Tab能自动补全,并最后能包含如下即代表成功

arm-buildroot-linux-gnueabihf-gcc

查看环境变量
在这里插入图片描述
这一小节一定要完美通过,后续都是在此基础上编译代码。
如何使用软件,参考视频。

五、IMX6ULL Pro开发板

5-1 基本介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上述所示,连接好后。
首先上电,拨下电源接口附近的开关,看见红灯亮,开机即可。(博主一开始没按,导致一直出错,哈哈哈哈哈)
使用 MobaXterm 软件打开串口,在串口看到“imx6ull login: login:”时(看不见就一直回车刷新,有可能被屏幕数据覆盖了),输入root 并回车即可,如
在这里插入图片描述

5-2 开发板挂载Ubuntu 的NFS目录(极其重要)

NFS协议实现了一个跨越网络的文件访问功能。NFS最大的特点是将服务端(Ubuntu)的文件系统目录树映射到客户端(开发板),而在客户端(开发板)访问该目录树与访问本地文件系统没有任何差别。
挂载ubuntu的NFS目录,当开发板的程序有问题,可以直接在Ubuntu中进行远程调试,提高调试效率,加快研发速度。
开发板挂载NFS,首先前面三者需要互相ping通。
mount 命令用来挂载各种支持的文件系统协议到某个目录下。

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

mount 成功之后,开发板在/mnt目录下读写文件时,实际上访问的就是Ubuntu中的 home/book/nfs_rootfs 目录,所以开发板和Ubuntu之间通过NFS可以很方便地共享文件。

5-3开发板使用TFTP服务传输文件(很少用)

开发板上可以使用tftp 命令传输文件到Ubuntu的tftpboot文件下。

六、开发板第一个APP实验

首先将Git下载的源码01_all_series_quickstart\04_ 嵌入式 Linux 应用开发基础知识 \source \01_hello通过FileZilla传输到Ubuntu中

在这里插入图片描述
对于需要放在开发板上运行的程序,一定要用其支持的带arm的gcc编译程序,才能正常运行,这时候需要使用交叉编译工具链
arm-buildroot-linux-gnueabihf-gcc编译命令,-o参数后面接编译后的程序名即hello,hello.c需要编译的文件名

arm-buildroot-linux-gnueabihf-gcc -o hello hello.c

在这里插入图片描述
开发板nfs挂载并运行,注:每次开机都要挂载,开机后只需挂载一次即可实时更新。挂载指令可根据视频设置为快捷指令。
在这里插入图片描述
在这里插入图片描述
运行结果展示
在这里插入图片描述

七、开发板第一个驱动实验

7-1 编译内核和模块

1、驱动程序包含的头文件要用到内核文件,需要首先编译内核。编译完成后,在arch/arm/boot 目录下生成 zImage内核文件 , 在arch/arm/boot/dts 目录下生成设备树的二进制文件 100ask_imx6ull-14x14.dtb 。把这 2 个文件复制到 /home/book/nfs_rootfs 目录下即可。
2、编译内核模块后安装到nfs目录即可。
3、使用mount命令到开发板上即可。
详细操作看视频或者文档
zImage:使用gzip压缩Image后,使用objcopy命令生成的Linux内核映像,该映像一般作为uboot的引导映像文件。

7-2 编译led驱动

找到源码01_all_series_quickstart/05 嵌入式 Linux 驱动开发基础知识source/02_led_drv/02_led_drv_for_boards/100ask_imx6ull_src_bin并传到Ubuntu中。
在这里插入图片描述
make编译后复制到nfs目录,若此时板子挂载了nfs目录,就会实时更新nfs目录。若板子串口掉了或者关机,则需要重新开机后执行mount命令。
在这里插入图片描述

移动到挂载文件/mnt,安装驱动
在这里插入图片描述
编译程序,结果黄灯亮
在这里插入图片描述

./ledtest /dev/100ask_led0 off 	  //关闭led0灯

八、构建bootloader、内核、文件系统(都可跳过)

1、Bootloader是在操作系统运行之前运行的一段代码,用于引导操作系统。
2、Uboot 是一个开源的主引导加载程序,用于引导设备的操作系统内核,并
含有多种命令以便调试系统,uboot是bootloader的一个子集。
uboot的核心作用就是启动操作系统内核,uboot的本质就是一段裸机程序。
3、init系统服务:init是 Linux 系统中用来产生其它所有进程的程序。它以守护进程的方式存在,其进程号为1 。 Linux系统在引导时加载 Linux 内核后,便由 Linux 内核加载 init 程序,由 init 程序完成余下的引导过程,比如加载运行级别,加载服务,引导 Shell图形化界面等等。
4、systemv 守护进程:在systemv中,在内核加载后运行的第1个程序被称为 init 程序 。 Init 做一些事情,其中之一就是加载一系列脚本来启动各种系统服务,例如网络、ssh、守护程序等。Systemv init 这样做的方法是为服务启动设置严格的顺序。每个服务都分配有一个优先级编号,init 会按优先级顺序启动服务。如需要确保网络连接后启动服务。
5、systemd 守护进程:systemd是Linux电脑操作系统之下的一套中央化系统及设置管理程序(init),包括有守护进程、程序库以及应用软件。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低 Shell 的系统开销的效果。

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

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

相关文章

sqli-labs-master 下载、搭建

sqli-labs-master sqli-labs-master 是一个帮助用户学习和测试 SQL 注入漏洞的开源项目。它提供了一系列的环境&#xff0c;用户可以在这些环境中进行实验&#xff0c;学习如何检测、利用和防御 SQL 注入攻击。 sqli-labs 下载地址&#xff1a; github.com/Audi-1/sqli-labs 搭…

刘知远团队大模型技术与交叉应用L5-BMSystem

为什么需要BMTrain&#xff1f; PLM越来越大。为了使训练更高效和廉价。我们有必要 1.分析GPU的显存去哪了&#xff1f; 2.理解GPU间的合作模式是如何的&#xff1f; 显存都去了哪里&#xff1f; CPU vs GPU CPU适合复杂逻辑运算。GPU适合大量重复的数值运算。 显存成分 1.前…

【Java】SpringMVC参数接收(二):JSON、URI、文件

1、获取JSON参数 RequestMapping("/hello") RestController public class HelloSpring {RequestMapping("/t10")public String t10(RequestBody UserInfo userInfo){return userInfo.toString();} } 2、获取URI中的参数 &#xff08;1&#xff09;获取单…

面对.pings勒索病毒威胁:深度解析如何对抗.pings勒索病毒的危害

导言&#xff1a; 随着科技的发展&#xff0c;互联网的普及&#xff0c;网络犯罪也在不断演变。其中一种恶意软件&#xff0c;.pings勒索病毒&#xff0c;威胁着个人和企业的数据安全。本文91数据恢复将介绍.pings勒索病毒的特点、如何恢复被加密的数据文件&#xff0c;以及有…

Codeforces Round 921 (Div. 2)

Codeforces Round 921 (Div. 2) Codeforces Round 921 (Div. 2) A. We Got Everything Covered! 题意&#xff1a;找到一个字符串s&#xff0c;使得所有可能长度为n的字符串都可以用前k个小写字母组成&#xff0c;并为s的子序列。 思路&#xff1a;A的题意理解对C很有用 首…

Leetcode 206 反转链表

反转链表 准备工作1&#xff09;ListNode基本结构2&#xff09;初始化ListNode集合 解法一&#xff1a;遍历创建新节点解法二&#xff1a;两组List&#xff0c;面向对象操作解法三&#xff1a;递归调用解法四&#xff1a;直接移动解法五&#xff1a;解法二的面向过程 Leetcode …

Java异常处理集合

Java异常处理 Java语言在执行后会中断&#xff0c;也就是在出错位置后的代码都不会被执行&#xff0c;为了使非致命错误后的程序仍然能够执行&#xff0c;引入异常处理机制。 异常 可处理的异常用Exception表示&#xff0c;不可处理的异常用Error表示&#xff0c;通常是栈内…

ShardingSphere之ShardingJDBC客户端分库分表下

目录 ShardingJDBC实战 STANDARD标准分片策略 COMPLEX_INLINE复杂分片策略 CLASS_BASED自定义分片策略 HINT_INLINE强制分片策略 ShardingJDBC实战 上篇已经将需要用到的类、数据库表都准备好了&#xff0c;本篇主要介绍分片配置文件。 STANDARD标准分片策略 如果按照上篇文…

Python笔记14-实战小游戏飞机大战(上)

文章目录 功能规划安装pygame绘制游戏窗口添加玩家飞机图像屏幕上绘制飞船代码重构驾驶飞船全屏模式射击 功能规划 玩家控制一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船&#xff0c;还可使用空格键射击。游戏开始时&#xff0c;一群外星人出现在天空中…

如何从 Android SD 卡恢复已删除的照片

您是否不小心从 Android SD 卡中删除了一些照片&#xff1f;您是否尝试访问昨天拍摄的照片&#xff0c;但无论您在哪里查看都找不到它们&#xff1f;您的 Android 手机的外部存储是否已损坏&#xff0c;其内容无法访问&#xff1f; 在这种情况下&#xff0c;您应该尽快采取行动…

LV老板重夺全球首富 再次超过马斯克;新东方安徽总部大厦启用;中国与泰国签署互免签证协定

今日精选 • LV老板重夺全球首富 再次超过马斯克• 新东方安徽总部大厦启用• 中国与泰国签署互免签证协定 投融资与企业动态 • ​​传Temu将于3月在美国上线半托管业务• 国内数字支付解决方案提供商 “连连数字” 估值150亿&#xff0c;即将IPO• 滴滴与宁德时代宣布成立…

【Javaweb程序设计】【C00164】基于SSM的飞机订票系统(论文+PPT)

基于SSM的飞机订票系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目包运行、免费远程调试 项目简介 这是一个基于ssm的飞机订票系统 本系统分为前台用户模块和后台管理员模块。 前台用户模块&#xff1a;当游客打开系统的网址后&#xff0…

营销领域有哪些著名的模型?如销售漏斗等

一、金字塔原理 模型 适用场景&#xff1a;提案 沟通 思考理论 模型 来源&#xff1a;麦肯锡 芭芭明托 1、表达的逻辑 遵循金字塔模型的逻辑&#xff0c;先说结论&#xff0c;后说论据。所有表达的内容都可归纳出一个核心论点。这个核心论点由N个论据作为支持&#xff0c;而…

Qt扩展-QXlsx读写Excel配置使用

QXlsx读写Excel配置使用 一、概述1. 功能概述2. 其他维护 二、安装1. 下载源码2. 配置项目3. 测试代码4. 运行结果 一、概述 项目介绍&#xff1a;https://qtexcel.github.io/QXlsx/Example.html GitHub&#xff1a;https://github.com/QtExcel/QXlsx/tree/master QXlsx 是一个…

时序分析中的去趋势化方法

时序分析中的去趋势化方法 时序分析是研究随时间变化的数据模式的一门学科。在时序数据中&#xff0c;趋势是一种随着时间推移而呈现的长期变化趋势&#xff0c;去趋势化是为了消除或减弱这种趋势&#xff0c;使数据更具平稳性。本文将简单介绍时序分析中常用的去趋势化方法&a…

java自定义异常处理操作

目录 引入 介绍 一、为我们的方法创建异常类 二、使用我们定义的异常类 引入 我们在编写java代码的时候,想要在我们自己写的方法中加入我们的异常处理 介绍 一、为我们的方法创建异常类 我们先单独创建一个类,来当作我们抛出异常的类 public class AgeIllegalException ex…

JavaScript DOM属性和方法之element元素对象

在HTML DOM中&#xff0c;elment对象表示HTML与纳素&#xff0c;可以包含的节点类型有元素u节点、文本节点、注释节点。它们有响应的属性和方法&#xff0c;有很多都是我们之前用过的。 一、element对象属性 1、attributes 2、childNodes 3、className 4、clientWidth、of…

计算机中丢失mfc100u.dll怎么解决,详细解析mfc100u.dll丢失的解决方法

遭遇“无法找到mfc100u.dll”的错误不必过分担忧&#xff0c;这是一个普遍现象。许多用户在启动某些软件或游戏的时候可能会碰到这样的情况。通常&#xff0c;这个错误信息表明你的计算机系统中缺失了一个关键的动态链接库(DLL)文件&#xff0c;它可能会妨碍应用程序的顺利启动…

Centos7 升级Docker 至最新版本

卸载旧版本的Docker yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 添加Docker的yum源 #yu…

uniapp,页面当有按钮的时候,可以做一个动态的效果

效果&#xff1a; 这个是当点着按钮的时候没有松开按钮的效果&#xff08;没有阴影&#xff09; 这个是当松开按钮的效果&#xff08;有阴影&#xff09; 原理讲解&#xff1a; 这段代码实现的业务逻辑是在一个Vue组件中控制“现金”按钮的阴影效果。具体来说&#xff0c;它通…