韦东山嵌入式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 的系统开销的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vivado 定义和配置I/O端口、

定义和配置I/O端口 您可以使用Vivado IDE导入、创建和配置I/O端口&#xff0c;如中所述以下部分。 导入I/O端口 根据项目类型&#xff0c;可以使用以下方法导入I/O端口&#xff1a; •I/O规划项目&#xff1a;您可以将XDC和CSV文件导入空的I/O规划项目当您使用文件导入功能…

Java Lock源码解读

一&#xff0c;概述 多线程问题本质是多个线程共同访问了同一块内存&#xff0c;导致该内存状态不确定而产生了一系列问题。concurrent包中提供的Lock类本质是对线程对象进行监督、排队&#xff0c;调度&#xff0c;确保lock只能有一个线程或共享线程成功返回&#xff0c;否则…

幻兽帕鲁游戏服务器搭建by阿里云服务器4核16G和32G配置价格表

如何自建幻兽帕鲁服务器&#xff1f;基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了&#xff0c;一看就懂系列。本文是利用OOS中幻兽帕鲁扩展程序来一键部署幻兽帕鲁服务器&#xff0c;阿里云百科aliyunbaike.com分享官方基于阿里云服务器快速创建幻兽帕鲁服务器教程&…

go 引用fork后的模块的两种方式(replace和工作区)

很久没更新了&#xff0c;一是工作琐碎&#xff0c;二是处在舒适区&#xff0c;但最近看着身边的同事一个个离开&#xff0c;危机感骤然而生&#xff0c;不得不重拾书本&#xff0c;毕竟生活还得继续&#xff0c;不卷是不可能的&#xff0c;谁让我们生在这个卷中卷的国度&#…

3d gaussian splatting介绍整理

3D 高斯分布是用于实时辐射场渲染的 3D 高斯分布中描述的一种光栅化技术&#xff0c;它允许实时渲染从小图像样本中学习到的逼真场景。 paper github 本文翻译整理自&#xff1a; blog: Introduction to 3D Gaussian Splatting DDPMs - Part 2 给出一些2D图片&#xff0c;用…

「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建

基于阿里云搭建幻兽帕鲁服务器方法&#xff0c;1到2分钟部署完成&#xff0c;稳定运行无卡顿&#xff0c;阿里云服务器网aliyunfuwuqi.com分享保姆级手把手教程&#xff0c;基于阿里云计算巢、云服务器或无影云桌面都可以&#xff1a; 基于阿里云幻兽帕鲁服务器创建教程 基于…

WLAN

前言 今天给大家讲一个不一样的实验,生活息息相关,特别有意思的,顺便让大家放松放松 实验 一.引入 实验拓扑图: 明眼人已经知道我没要干嘛了,WIFI无线路由器 所有的PC设备都换成WIMP300N模块无线接收 成功后你们的拓扑图就会和我的一样 二、配置Linksys WRT300N   配置pc3…

循环测试之旅——深度解析Pytest插件 pytest-repeat

在软件开发中,测试的重要性不言而喻。而为了提高测试的鲁棒性和可靠性,Pytest插件 pytest-repeat 应运而生。这个插件可以帮助你轻松实现测试用例的循环运行,以更全面地评估代码的稳定性。本文将深入介绍 pytest-repeat 插件的基本用法和实际案例,助你更好地利用循环测试,…

独占指针:unique_ptr 与 函数调用 笔记

推荐B站视频&#xff1a; 2.unique_ptr_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p2&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 3.unique_ptr与函数调用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p3&vd_sourcea934d…

MIT_线性代数笔记:第 29 讲 奇异值分解

目录 如何实现用矩阵数学语言描述这一过程举例 本讲介绍奇异值分解&#xff08;Singular value decomposition&#xff09;&#xff0c;简称 SVD。这是矩阵最终也是最好的分解&#xff0c;任意矩阵可分解为 A U Σ V T AUΣV^T AUΣVT&#xff0c;分解结果为正交矩阵 U&#x…

OpenAI API 的最新动态:新一代的嵌入模型,更新 GPT-4 Turbo,更新 GPT-3.5 Turbo 以及降低 API 价格

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 OpenAI 正在推出新一代嵌入模型、新的 GPT-4 Turbo 和审查模型、新的 API 使用管理工具&#xff0c;而且很快就会降低 GPT-3.5 Turbo 的价格。 OpenAI…

【MAC】Multi-Level Monte Carlo Actor-Critic阅读笔记

基本思想&#xff1a; 利用多层次蒙特卡洛方法&#xff08;Multi-Level Monte Carlo&#xff0c;MLMC&#xff09;和Actor-Critic算法&#xff0c;解决平均奖励强化学习中的快速混合问题。 快速混合&#xff1f; 在强化学习中&#xff0c;当我们说一个策略"混合得快"…

3D视觉技术快讯

SparseGS主要解决了3D GS(Gaussian Splatting)与NeRF类似的稀疏视角问题&#xff0c;即当训练输入视角很稀疏时&#xff0c;GS会在训练中过拟合&#xff0c;从而在新视角上的测试结果较差。本论文则是提出使用原有的深度先验以及显式的约束来提升GS在稀疏视角下的表现&#xff…

以太网与PON网络的巅峰对决

在这网络的江湖中&#xff0c;各路江湖豪侠都神色匆忙地往同一个地方赶&#xff0c;豪侠们脸上都充满期待和焦虑&#xff0c;生怕错过了什么。这个地方就是传说中的园区网&#xff0c;因为在那里万众期待已久的以太网与PON网络的巅峰对决“将在今天上演。 一方是以太网大侠&am…

Hive 行列转换

行列转换 列转行 使用 lateral view explode(array|map) 或 lateral view inline(array_struct) 可以将列转换为行。 单列转多行&#xff0c;降维&#xff08;单列数组或键值对&#xff09; 示例1&#xff1a;explode(array(…)) select ..., A from T lateral view exp…

Java-List接口常用方法和遍历方法

List的继承结构 其中&#xff0c;红色为接口&#xff0c;蓝色为实现类 List的四大方法 List的基本操作void add(int index,E e)boolean remove(Object o)E remove(int index)E set(int index,E e)E get(int index)其中注意删除方法有两种&#xff0c;执行的时候主要选择实参…

作者推荐 | 【深入浅出MySQL】「底层原理」探秘缓冲池的核心奥秘,揭示终极洞察

探秘缓冲池的核心奥秘&#xff0c;揭示终极洞察 缓存池BufferPool机制MySQL缓冲池缓冲池缓冲池的问题 缓冲池的原理数据预读程序的局部性原则&#xff08;集中读写原理&#xff09;时间局部性空间局部性 innodb的数据页查询InnoDB的数据页InnoDB缓冲池缓存数据页InnoDB缓存数据…

可解释性AI

方向一&#xff1a;可解释性AI的定义与重要性 1. 什么是可解释人工智能 可解释人工智能&#xff08;Explainable Artificial Intelligence, XAI&#xff09;是指智能体以一种可解释、可理解、人机互动的方式&#xff0c;与人工智能系统的使用者、受影响者、决策者、开发者等&…

牛客网---------[USACO 2016 Jan S]Angry Cows

题目描述 Bessie the cow has designed what she thinks will be the next big hit video game: "Angry Cows". The premise, which she believes is completely original, is that the player shoots cows with a slingshot into a one-dimensional scene consistin…

中仕教育:事业单位考试考什么?

事业单位考试分为两个阶段&#xff0c;分别是笔试和面试&#xff0c;考试科目包括公共科目和专业科目两部分。 公共科目内容是公共基础知识、职业能力测试或申论。一种形式为&#xff1a;公共基础知识职业能力测试或职业能力测试申论。另一种形式为&#xff1a;公共基础申论。…