文章目录
- 一、嵌入式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 等其他平台上运行。
设置交叉编译工具主要是设置PATH 、ARCH 和 CROSS_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 的系统开销的效果。