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

文章目录

      • 一、嵌入式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.mzph.cn/news/649400.shtml

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

相关文章

Open CASCADE学习|圆柱螺旋线绘制原理探究

1、圆柱螺旋线绘制原理 在OCC中&#xff0c;圆柱面的参数方程为&#xff1a; 设P为&#xff08;x0,y0,z0&#xff09;,则 xx0r*cos(u) yy0r*sin(u) zz0v 但u、v之间有关系时&#xff0c;此方程表达为圆柱螺旋线&#xff0c;u、v之间为线性关系时是等螺距螺旋线&#xff0…

文件上传之秒传功能

秒传是一种文件的传输机制&#xff0c;用于在文件已经存在于目标服务器上时&#xff0c;通过校验文件的唯一标识&#xff0c;实现快速而无需从新上传整个文件&#xff0c;它解决了重复上传相同文件的问题&#xff0c;提高了文件传输的效率和节省了带宽资源。 技术阐述&#xff…

免 费 小程序商城搭建之鸿鹄云商 SAAS云产品概述

【SAAS云平台】打造全行业全渠道全场景的SaaS产品&#xff0c;为店铺经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营…

软件测试面试八股文(2024新版)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发…

【unity实战】实现蓄力丢手榴弹、烟雾弹、燃烧弹的效果

文章目录 爆炸燃烧烟雾效果资产手榴弹丢手雷烟雾弹、燃烧弹实现手雷每次撞墙弹发出音效&#xff08;补充&#xff09;完结 爆炸燃烧烟雾效果资产 https://assetstore.unity.com/packages/vfx/particles/war-fx-5669 手榴弹 手榴弹配置好刚体&#xff0c;碰撞体 新增脚本Th…

Qlik Sense : Store With Retry (保存重试机制)

Background sometime you cannot store the file directly ,maybe there are another process are reading/storeing the file , so you would need to wait another proecess done and retry . then we come up this solution . 有时您不能直接存储文件&#xff0c;可能还有…

实验:eNSP AR通过telnet远程登录另外一台AR

实验2&#xff1a;eNSP AR通过telnet远程登录另外一台AR 基于实验1的基础上来进行&#xff0c;我们通过AR2220登录AR3260 首先设置远程登录密码 1、user-interface vty 0 4 进入用户的虚拟终端 2、设置密码 set authentication password cipher Huawei 这里的意思就是设置密…

数据结构(C语言版)代码实现(四)——静态单链表的部分代码实现

目录 参考材料、格式 头文件SLinkList.h 库、宏定义、函数类型声明 线性表的静态单链表存储结构 按值查找 初始化静态链表 分配空间 回收空间 打印已用链表中的元素 求集合(A-B)U(B-A)中的元素&#xff08;重点介绍&#xff09; 调试过程 修改报错与警告 调试 完整…

找不到msvcp110.dll怎么办,msvcp110.dll丢失修复方法分享

当计算机系统中无法找到msvcp110.dll这个特定的动态链接库文件时&#xff0c;可能会引发一系列运行问题和功能受限的情况。msvcp110.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序来说&#xff0c;它是至关重要的运行组件…

vue模拟聊天页面列表:滚动到底部,滚动到顶部触发加载更多

先看下效果&#xff1a; 代码&#xff1a; <template><div><div style"text-align: center"><button click"scrollTop">滚动到顶部</button><button click"scrollBottom">滚动到底部</button></d…

Vue深入学习2—虚拟DOM和Diff算法

1、snabbdom 是什么&#xff1f; snabbdom是“速度"的意思&#xff0c;源码只有200行&#xff0c;使用TS写的&#xff0c;让东西变得模块化 2、snabbdom 的 h 函数如何工作&#xff1f; h函数用于产生虚拟节点&#xff0c;同时也可以嵌套使用&#xff0c;得到虚拟DOM树&am…

kuberneters可视化界面-kuboard

一、kuboard安装 可以选用&#xff0c;docker和docker-commpose kuberneters 安装 kuboard官网 1、 docker安装 sudo docker run -d \--restartunless-stopped \--namekuboard \-p 80:80/tcp \-p 10081:10081/tcp \-e KUBOARD_ENDPOINT"http://192.168.1.10:80" …

linux的kali安装,换源,更新包

下载kali kali.org进入官网后点第二个 然后点第一个 解压kali 下载后获得.7z压缩包&#xff0c;建议移动到合适自己电脑的位置进行解压&#xff0c;我喜欢放在D盘 启动kali 双击进入解压出的文件夹&#xff0c;将唯一一个.vmx文件用vmware打开&#xff08;没装的自行提前装…

数据结构奇妙旅程之二叉树题型解法总结

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

【深度学习】CodeFormer训练过程,如何训练人脸修复模型CodeFormer

文章目录 BasicSR介绍环境数据阶段 I - VQGAN阶段 II - CodeFormer (w0)阶段 III - CodeFormer (w1) 代码地址&#xff1a;https://github.com/sczhou/CodeFormer/releases/tag/v0.1.0 论文的一些简略介绍&#xff1a; https://qq742971636.blog.csdn.net/article/details/134…

链路追踪-调用链跟踪-Jaeger

文章目录 一、什么是链路跟踪二、OpenCensusOpenCensus 主要特点OpenTracing标准基本概念Span 三、典型服务端产品什么是OpenTracing?opentracing 使用介绍 四、JaegerJaeger 包含的模块Jaeger-client&#xff08;客户端库&#xff09; 五、Jaeger服务容器化部署过程问题整理 …

csdn黑色背景用法

在edge浏览器下&#xff0c;下载油猴脚本管理器 脚本下载 edge扩展 效果图如下&#xff1a;&#xff1a;&#xff1a;

[ACM学习] 进制转换

进制的本质 本质是每一位的数位上的数字乘上这一位的权重 将任意进制转换为十进制 原来还很疑惑为什么从高位开始&#xff0c;原来从高位开始的&#xff0c;可以被滚动地乘很多遍。 将十进制转换为任意进制

适合深夜发朋友圈的心灵鸡汤(整理70句)

1、很多时候&#xff0c;我们赢得了口舌&#xff0c;却失去了感情。 2、失恋到极致的时候&#xff0c;我真的会用后退来保护自己。 3、全身心地去爱&#xff0c;你可能会受到伤害&#xff0c;但这是完整人生的唯一方式。 4、自由不是想干什么就干什么&#xff0c;而是不想干…

Linux中LVM实验

LVM实验&#xff1a; 1、分区 -L是大小的意思-n名称的意思 从vg0&#xff08;卷组&#xff09;分出来 2、格式化LV逻辑卷 LVM扩容 如果icdir空间不够了&#xff0c; 扩展空间lvextend -L 5G /dev/vg0/lv1 /dev/vg0/lv1(pp,vg,lv) 刷新文件系统xfs_growfs /lvdir VG扩容 …