嵌入式Linux视频笔记----Linux基础入门

https://www.bilibili.com/video/BV1JK4y1t7io/?spm_id_from=333.788.videocard.2

运行于ARM-A7的嵌入式Linux系统基础知识,开发板还没买,视频全部看一遍,PC装了Ubuntu和Linux,简单测试过视频中的几个例子,对嵌入式Linux有了基本了解

 

 

P1 开发板和大学堂
1 开发板:核心板接口*3、Flash类型、底板类型*2、Qt界面
2 大学堂:链接、安装演示、注册账号、下载资料

P2 为什么学习Linux开发
1 应用场景:看网站服务器www.netcraft.com、智能家居、工业机器人、笔记本、行车记录仪、Kindle
2 职业方向:服务器运维、应用软件开发、嵌入式系统开发
3 转型经验:参考开源代码picoc(建议有经验者研究)、write-a-c-interpreter(建议菜鸟研究,国人写,有中文文档)编写C语言解释器

P3 如何学习Linux开发
1 学习群体定位:入门 进阶
2 传统学习路线:基本操作、ARM裸机、Linux移植、驱动开发、应用编程、项目实战
3 野火理念:树莓派启发及其优缺点;野火路线--常用操作、工具体验、应用编程。项目实战、ARM裸机开发(勿深入)、Linux系统移植、Linux驱动开发

P4 i.MX系列芯片简介
1 i.MX系列处理器:挑选芯片--NXP/产品/网站芯片选择、性能稳定、资料齐全、芯片资源、开发工具、供货周期、性价比、运行环境;i.MX6ULL官网介绍、ARM-A7、功能框图 外设丰富、官网文档
2 ARM体系架构:指令集--软硬件接口、机器码、汇编;架构--具体指令集;处理器=内核、芯片为soc;授权方式--指令集/架构、内核(电路图、测试方法)、使用授权(使用封装好的内核);A7内核--性能功耗平衡。
3 iMX RT简介:跨界处理器、外设与i.MX6ULL类似

P5 Linux系统简介
1 起源:1991、企鹅logo、1979商业化的UNIX、Minix教学用 单人开发、GNU、Linux学习Minix 借助GNU
2 主要构成:内核+GNU工具和类库
3 发行版:Debian、Fedora、SUSE、其他

P6 安装ubuntu系统
开发环境--单系统Linux、双系统、Win10安装Linux子系统、虚拟机、企业服务器+客户端
1 安装VirtualBox:VirtualBox官网介绍、开源、官网下载、安装演示、新建虚拟电脑 虚拟内存 虚拟硬盘
2 安装Ubuntu:开源、官网下载桌面版、虚拟机中安装Ubuntu、安装增强功能动态调整Ubuntu分辨率
3 设置网络、共享文件夹:ubuntu内设置--拖放、共享粘贴版、Ubuntu内ping

P7 Linux文件目录
1 Linux目录层次标准:根目录 / ls -l tree;50页的Linux目录标准
2 目录详细介绍:bin--binary 二进制命令文件;boot--bootloader 启动文件;cdrom--挂载cd镜像、逐渐淘汰;dev--设备文件;etc--配置文件;home--用户主目录;lib lib64--bin目录的库文件;media--媒体设备;mnt--mount设备或文件系统挂载;opt--option可选、测试用;proc--应用程序、内存、控制台、CPU 信息;root--管理员主目录;run--系统运行信息;sbin--root用户可执行的二进制命令;srv--网络服务信息;sys--硬件操作接口;tmp--临时存储;usr--大部分文件;var--易变文件。
3 文件类型介绍:d--目录文件;- --普通文件;l--链接文件;c--字符设备文件;b--block块设备文件;
系统路径--/绝对路径、相对路径、. ./当前目录、.. ../上一层目录

P8 用户管理与文件权限
1 用户与用户组:管理员root、系统用户、普通用户;多任务多用户系统、安全性;UID user ID、GID group ID;/etc/passwd文件介绍 UID、/etc/shadow文件介绍 加密密码、/etc/group文件介绍 GID;
2 文件权限:r w x - 用户 用户组 其他用户

P9 使用Linux命令行  上
1 Shell是什么:硬件 内核 系统调用 应用程序Shell;Tab自动补全;APP一般都有Shell,但未必有图形界面
2 命令的格式与帮助:-h --help;command【-options】【argument】
3 常用命令:查询手册man比help更详细;目录操作--ls查看当前目录内容、cd、pwd打印当前目录、mkdir、rmdir删除空文件夹、mv;文本操作--touch新建文件、cat查看文件、echo写入文件、wc文本统计、rm删除文件

P10 使用Linux命令行  中
1 Shell是什么:
2 命令的格式与帮助:
3 常用命令:文本操作--ln创建软硬链接文件、cp复制文件或目录、tar打包解包、find寻找文件路径、grep文件内查找字符串;用户管理--sudo一次性获取root权限、su切换用户、useradd adduser2种添加用户的方式、usermod改GID、userdel deluser删用户、passwd改用户密码、groupadd addgroup、groupdel delgroup操作权限;磁盘管理;网络操作;控制终端;开关机。

P11 使用Linux命令行  下
1 Shell是什么:
2 命令的格式与帮助:
3 常用命令:文件权限--chmod修改文件权限、chown修改文件拥有者、chgrp修改文件用户组;磁盘管理--df查看文件系统信息、du递归查看目录下所有文件信息、mount将硬件设备挂载到目录、umount;网络操作--ping、ifconfig需要安装APP 查看配置网络;控制终端--clear清屏;开关机--reboot重启、poweroff关机。

P12 使用编辑器 上
tab sudo !!
1 gedit:ubuntu默认、图形界面、类似notepad++、
2 vi/vim:不依赖图形界面,应用范围广;历史悠久,支持广泛;vim为升级版,需要单独安装;模式--一般、插入、命令行;打开方式、模式切换;
一般模式快捷键--跳转到第n行、跳转到最末行、跳转第1行、查找文本

P13 使用编辑器 下
tab sudo !!
1 gedit:
2 vi/vim:
一般模式快捷键--u撤销操作;dw删除1个单词、dd删除当前行、ndd删除n行、x剪切光标对应1个字符、y复制、P p粘贴、yy复制当前行、nyy复制n行、v V选择多个字符 多行
命令行模式快捷键--w保存 另存为、r读取、q未修改直接退出、q!不保存直接退出、wq保存并退出、set nu行首加入行号、set nonu不显示行号、!command
最常用:i ESC : x wq! q!

P14 Shell脚本编程 上
1 脚本简介:批处理、整合命令;内置命令+外部命令 type;将C程序hello world变为shell;编写shell脚本;启动方式--作为程序执行、指定解释器运行、source、.
2 脚本语法:

P15 Shell脚本编程 中
1 脚本简介:
2 脚本语法:定义变量--无单引号时不可以有空格、双引号可以解引用;使用变量--{}确认边界;命令结果赋值给变量;删除变量unset;特殊变量--$0当前脚本文件名、$n传递给脚本的第n个参数、$#传递的参数个数、$* $@传递给脚本的所有参数、$?上个脚本返回值、$$当前Shell ID;字符串拼接--并排放;读取键盘输入数据read;退出当前进程exit;整数数学运算(());逻辑与 或$$ ||;

P16 Shell脚本编程 下
1 脚本简介:
2 脚本语法:检测条件是否成立、管道、if、if else、if elif else、case in、for in、while、函数

P17 Linux环境变量
1 环境变量简介:export将全局变量导出为环境变量
2 Shell配置文件:相关配置文件、Shell执行顺序

P18 构建deb软件安装包
1 Linux软件包:组成文件;源码包、二进制包;
2 deb包与dpkg工具:deb包、rpm包;dpkg命令;deb包文件结构分析、打包脚本
3 构建一个helloworld的deb包:利用打包脚本实现
4 apt工具:新版包管理工具

P19 硬件介绍和固件烧录
1 硬件资源介绍:核心板--MPU、FLASH、RAM;Pro底板--外设简介;mini底板
2 SD卡烧录Debian镜像:跨平台Etcher工具--镜像、设备、Flash;

P20 运行开发板与fire-config介绍
1 开发板跑起来:boot配置、CH340串口驱动、MobaXterm安装使用
2 fire-config工具介绍:修改开发板配置文件

P21 fire-config刷机
将SD卡内容写入FLASH,全程演示

P22 fire-config连接wifi
上一讲先烧好FLASH、跳线帽设置;屏蔽驱动打印信息 echo  "1 4 1 7" > /proc/sys/kernel/printk 、使能wifi;搜索、连接、ipconfig、ping

P23 点亮第1个LED
利用echo写驱动文件

P24 使用脚本体验硬件
安装脚本安装包、执行各个脚本

P25 Git简介和项目资料获取
官网下载git;git clone、git pull

P26 安装NFS服务器
网络文件系统、开发板与PC共享文件;配置PC机Linux NFS共享文件夹、PC机开发板互相ping通、开发板挂载PC机路径

P27 GCC与Helloworld
GCC由来:GNU组织、unix系统、minix系统、posix接口、internet
GCC编译工具链:gcc编译器--预处理、编译;binutils工具集--汇编、链接
运行第一个helloworld:PC端--建文件夹、新建c文件、编译、运行;开发板端类似

P28 ARM-GCC与交叉编译
ARM-GCC:本地编译、交叉编译;ARM-GCC是针对arm的编译器;
安装:sudo apt install gcc-arm-linux-gnueabihf、官网下载
案例:ARM中运行X86-64架构程序报错,Exec format error;ARM运行交叉编译程序成功

P29 Linux系统和Helloworld 上
了解执行机制的用途:借鉴、了解报错信息
裸机执行机制:C调用底层驱动、编译、烧录、运行
Linux系统执行机制:GCC编译--c/i/s/o/应用程序;Linux内核--Shell、fork、execev、sys_execve、do_execve、load_elf_binary;glibc库--动态链接、静态链接;执行函数;glibc库退出

P30 Linux系统和Helloworld 下
gcc预处理:    gcc -E helloworld.c     -o hello.i   -v;cc1
编译c:        gcc -S hello.i     -o hello.s  -v;cc1
编译汇编:    gcc -c hello.s     -o hello.o -v;
链接可重定位文件:    gcc     hello.o     -o hello    -v;动态链接、静态链接

P31 Makefile简介
make和Makefile:make工具--找出修改过的文件及其影响的文件并编译;makefile--记录依赖关系和编译规则
如何学习:依赖关系;基本语法、变量、分支判断、头文件依赖、隐含规则、自动化变量、模式规则、函数

P32 Makefile三要素
目标、依赖、命令
目标:依赖文件或其他目标
tab命令1~n
控制台演示

P33 引入Makefile管理项目
2个文件,3个函数,gcc直接编译
使用Makefile编译、改造Makefile,生成中间文件.o,缩短编译时间

P34 Makefile的变量、模式规则
系统变量:CC AS MAKE
自定义变量:=延迟赋值    :=立即赋值    ?=空赋值    +=追加赋值
自动化变量: $<第1个依赖文件    $^全部依赖文件    $@目标
用变量优化上一个视频的Makefile文件

P35 Makefile的模式规则
模式匹配:%匹配任意多个非空字符,类似参数传递;利用%优化Makefile
默认规则:.o默认使用.c文件编译

P36 Makefile条件分支
ifeq else endif;ifneq else endif;

P37 Makefile常用函数
官方手册 中英文
patsubst:模式替换
notdir:去掉目录取文件名
wildcard:获取当前目录下所有匹配模式的文件名
foreach:循环
利用函数改造Makefile

P38 Makefile解决头文件依赖
增加头文件及声明
修改Makefile

P39 C语言面向对象基础
面向过程:问题分解为步骤、用函数实现步骤、根据需求调用函数
面向对象:问题分解为对象、调用对象的方法属性解决问题
面向对象三大特性:封装--隐藏细节;继承--复用代码;多态--函数指针

P40 一切皆文件
Linux内核:硬件抽象为文件
虚拟文件系统VFS:抽象层;抽象对象--封装底层细节、利用C语言多态;super_block具体文件系统、inode具体文件、dentry文件路径;inode_operation可以删除、重命名文件;file_operation打开、读写文件;
普通文件系统:ext4、fat32、ubifs
特殊文件系统:进程文件系统procfs,类似任务管理器;设备文件系统devfs,硬件操作接口
用法:用户函数、系统调用函数、虚拟文件系统、实际文件系统

P41 文件描述符和打开模式
系统IO编程:系统调用函数;open--找到文件操作接口;write;read;lseek;close;文件描述符--特殊索引、实际为进程中file_struct结构体成员fd_array数组下标;进程--程序本质为进程
标准IO编程:glibc库
文件打开模式:主模式--只读、只写、读写;副模式--不存在则创建、追加、直接IO--不经过页缓存区直接写入磁盘、同步--相当于调用sync、非阻塞

P42 open close 函数
头文件、函数原型、返回值
虚拟机C代码演示:只读模式打开不存在文件报错、读写 创建模式打开不存在文件成功

P43 read write函数
头文件、函数原型、返回值
虚拟机C代码演示:复制普通文件--打开源文件、新建目的文件、读取并写入、关闭所有文件;

P44 lseek和sync函数
头文件、函数原型、返回值
lseek:设置文件读写位置、文件开头、当前位置、文件末尾
sync:页缓存和回写--用户空间buff、内核空间页缓存区、磁盘;sync将页缓存区内容立刻强制写入磁盘
虚拟机C代码演示:lseek--偏移100个字节追加3个字节;

P45 标准IO函数
C标准库实现了IO缓存区,避免频繁在用户态和内核态之间切换
标准IO函数:fopen、fclose、fwrite、fread、fseek、fflush类似sync,强制将IO缓存区内容写入页缓存区
文件IO五大模式:阻塞--无法读取则休眠;非阻塞--立即返回;IO多路复用;异步IO;信号驱动IO

P46 控制LED灯设备
驱动程序:本质为硬件的节点文件
应用程序:使用设备节点文件
控制硬件设备步骤:找到设备节点文件、/dev 更底层  1个文件控制全部特性、 /sys稍抽象  1个文件控制1个特性;找到设备文件使用方式
LED灯程序:设备节点文件位置-- /sys/class/leds;使用方式--brightness写入0-255数值控制亮度
开发板led.c代码写设备文件控制灯闪烁

P47 控制蜂鸣器
/sys 文件其实是Linux内核导出到用户空间的硬件接口
GPIO子系统需要手动导出蜂鸣器接口
控制台控制蜂鸣器;C函数控制

P48 检测按键输入
设备文件:/dev/input/by-path/platform-gpio-keys-event
input子系统:按键、键盘、鼠标、触摸屏;input_event结构体成员介绍
C代码检测按键是否按下


版权声明:本文为gzc0319原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。