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


本人学习完韦老师的视频,因此来复习巩固,写以笔记记之。
看完视频复习的同学观看最佳!
基于 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 的系统开销的效果。

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很抱歉,我并不能完全理解您的问题。如果您是想了解关于嵌入式Linux机器人的开发,这需要考虑到硬件和软件两个方面。一般情况下,我们需要选择合适的硬件平台,并在其上安装嵌入式Linux系统,然后使用编程语言(如C/C++、Python等)编写机器人的控制程序。 以下是一个简单的示例代码,使用Python语言实现了一个基于嵌入式Linux机器人的前进和后退功能: ``` python import RPi.GPIO as GPIO import time # 设置GPIO口 GPIO.setmode(GPIO.BOARD) GPIO.setup(11, GPIO.OUT) GPIO.setup(13, GPIO.OUT) GPIO.setup(15, GPIO.OUT) GPIO.setup(19, GPIO.OUT) # 向前 def forward(): GPIO.output(11, GPIO.HIGH) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.HIGH) GPIO.output(19, GPIO.LOW) # 向后 def backward(): GPIO.output(11, GPIO.LOW) GPIO.output(13, GPIO.HIGH) GPIO.output(15, GPIO.LOW) GPIO.output(19, GPIO.HIGH) # 停止 def stop(): GPIO.output(11, GPIO.LOW) GPIO.output(13, GPIO.LOW) GPIO.output(15, GPIO.LOW) GPIO.output(19, GPIO.LOW) # 主函数 if __name__ == '__main__': try: while True: forward() time.sleep(2) stop() time.sleep(1) backward() time.sleep(2) stop() time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() ``` 上述代码使用了树莓派(Raspberry Pi)的GPIO库,通过设置GPIO口的电平来控制机器人的前进和后退。当然,这只是一个简单的示例代码,实际的机器人开发还需要考虑到很多其他的因素,比如传感器、图像识别等等。 ### 回答2: 嵌入式Linux机器人的实现源代码可以分为几个关键方面: 1.硬件驱动程序:为了使机器人能够与外部设备进行通信和控制,需要编写硬件驱动程序。这些驱动程序可以包括控制底盘的驱动程序、传感器驱动程序、摄像头驱动程序等。 2.操作系统和内核定制:嵌入式Linux机器人需要一个适合嵌入式设备的操作系统和内核。在源代码中,我们需要对操作系统和内核进行定制,以满足机器人的需求。例如,可以选择定制轻量级的Linux发行版,去除不必要的组件和功能,加入对机器人硬件的支持等。 3.通信和控制程序:机器人要能够与其他设备、服务器或人机界面进行通信和控制。因此,我们需要编写通信和控制程序,以实现远程控制、信息传输等功能。这些程序可以使用网络协议、串口通信或其他通信方式。 4.感知和决策算法:机器人需要能够感知周围环境并做出相应决策。在源代码中,我们需要实现各种感知算法,如图像识别、目标跟踪、距离测量等,并结合决策算法,使机器人能够做出适当的行动。 5.用户界面和应用程序:为了更好地与机器人进行交互,我们可以编写用户界面和应用程序。这些程序可以包括机器人状态显示、地图生成、路径规划等。用户界面可以是图形化界面或命令行界面,根据实际需求进行选择。 总之,嵌入式Linux机器人的实现源代码是一个综合性的工程,需要涉及到硬件驱动、操作系统定制、通信和控制程序、感知和决策算法以及用户界面和应用程序等方面的编写和集成。这些源代码的编写需要深入理解嵌入式Linux系统的原理和机器人的工作原理,并结合实际的硬件和应用需求进行开发。 ### 回答3: 嵌入式Linux机器人的源代码实现可以包括以下几个方面: 1. 系统初始化:源代码需要实现嵌入式Linux系统的初始化,包括启动引导程序、加载内核镜像、初始化硬件设备、加载文件系统等。 2. 传感器驱动:机器人通常需要使用各种传感器来感知环境。源代码需要实现传感器驱动程序,以便与传感器进行通信和数据交换,如摄像头驱动、红外传感器驱动、超声波传感器驱动等。 3. 运动控制:机器人的运动控制涉及到电机、舵机等设备的驱动。源代码需要实现运动控制的相关算法,如PID控制算法、路径规划算法等,并与电机和舵机进行通信,控制机器人的运动。 4. 环境感知:源代码需要实现对机器人周围环境的感知和分析,以便进行智能决策。例如,图像处理算法可以用于识别目标物体,声音处理算法可以用于语音识别等。 5. 通信模块:机器人通常需要与其他系统进行通信,如与远程控制台进行通信、与其他机器人进行协作等。源代码需要实现通信模块,以便机器人能够与其他系统进行数据传输和指令交互。 6. 高级功能:根据机器人的具体应用场景,源代码还可以实现一些高级功能,如人脸识别、目标跟踪、自主导航等。这些功能需要依赖于相应的算法和模型,源代码需要与这些算法和模型进行集成。 总之,基于嵌入式Linux实现机器人的源代码包含了系统初始化、传感器驱动、运动控制、环境感知、通信模块以及各种高级功能的实现。这些源代码的编写需要结合具体的硬件平台和应用需求,并进行充分的调试和测试,确保机器人的正常运行和实现预期的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值