嵌入式Linux系统编程
2024-01-05 15:40:44 2 举报
AI智能生成
嵌入式Linux系统编程是指在嵌入式系统中使用Linux操作系统进行软件开发的过程。这种编程主要关注于开发实时、高效且稳定的应用程序,以满足特定硬件资源的需求。在嵌入式Linux系统编程中,开发人员需要熟悉Linux内核、设备驱动程序、文件系统、网络协议等关键组件。他们还需要了解如何根据特定硬件平台进行调整和优化,以保证应用程序能够在有限的资源条件下正常运行。常见的嵌入式Linux系统编程包括硬件初始化、设备驱动程序开发、系统服务定制、应用程序开发等。
作者其他创作
大纲/内容
<div><span style="font-size: inherit;">硬件相关</span><br></div>
处理器
CPU厂商
PC
Intel
奔腾
<div>酷睿</div>
<div>AMD</div>
<div><span style="font-size: inherit;">IBM</span><br></div>
<div>国产龙芯</div>
手机
<div>高通 Qualcomm</div>
联发科 MTK
Marvell
<div>三星</div>
<div>华为海思</div>
<div> CPU架构</div>
CISC
<div>X86</div>
<div><span style="font-size: inherit;">X86-64(amd64)</span><br></div>
<div>RISC</div>
ARM
<div>MIPS</div>
<div>PowerPC</div>
MCU
<div>51系列</div>
<div>STC</div>
Silicon Labs
C8051f120
ST 意法半导体
STM32
STM32F103
<div>STM32F407</div>
<div>TI 德州仪器</div>
MSP430
MSP430g2553
<div>MSP430F5438</div>
<div>MSP430F5529</div>
<div><span style="font-size: inherit;">Arduino</span><br></div>
ATMEL
AVR
<div>NXP 飞思卡尔</div>
K60
Renesas 瑞萨
<div> 通信</div>
通信方式
USB
<div>WiFi</div>
Serial
<div>ZigBee</div>
<div>Ethernet</div>
Bluetooth
<div>通信协议</div>
SPI
<div>I2C/I2S</div>
<div>UART</div>
<div>USB</div>
<div> CAN(USBCAN)</div>
电子器件
无线芯片
博通 Broadcom
<div> 高通 Qualcomm</div>
<div>联发科 MTK</div>
<div>瑞昱 Realtek </div>
<div>Marvell<br></div>
<div>存储</div>
flash
<div>nand</div>
<div>EMMC</div>
<div>SSD</div>
<div> UFS</div>
nor
<div>RAM</div>
<div>传感器</div>
温度传感器
<div>湿度传感器</div>
<div>烟雾传感器</div>
<div>距离传感器</div>
<div>超声传感器</div>
<div>光电传感器</div>
<div>巡线传感器</div>
<div> 红外传感器</div>
红外发射/接收器
<div>红外避障传感器</div>
<div>压力传感器</div>
<div>声音传感器</div>
<div>电子罗盘</div>
三轴加速度计
<div>霍尔传感器</div>
<div><span style="font-size: inherit;">计算机知识</span><br></div>
<div><span style="font-size: inherit;">操作系统</span><br></div>
嵌入式系统
实时操作系统
FreeRTOS
<div>VxWorks</div>
<div>RT-Thread</div>
<div>μC/OS-II</div>
<div> μClinux</div>
<div>非实时操作系统</div>
Ubuntu
<div>OpenWrt</div>
<div>PC系统</div>
Windows
<div>Linux</div>
<div>Debian</div>
Ubuntu
<div>Centos</div>
<div>Red Hat</div>
<div>OpenSuSE</div>
Arch
<div>Kali</div>
<div>elementary OS<br></div>
<div>deepin</div>
<div>MAC OS</div>
<div>移动端系统</div>
Android
<div>IOS</div>
<div>WindowsPhone</div>
<div>ubuntu</div>
<div>Symbian</div>
<div>Blackberry</div>
<div>Harmony</div>
<div>计算机网络</div>
<div>802.11</div>
<div>TCP/IP模型</div>
应用层
HTTP/HTTPS
<div>DHCP</div>
<div>DNS</div>
<div>SMTP</div>
<div>POP3</div>
<div>NTP</div>
<div>FTP</div>
<div>SSH</div>
<div>Telnet</div>
<div>传输层</div>
TCP
<div>UDP</div>
<div>QUIC</div>
<div>网络层</div>
IP
<div>ICMP</div>
<div>IGMP</div>
<div>链路层</div>
ARP
PPP
OSI模型
<div>常用服务器</div>
<div>文件传输</div>
Http/Https
<div><span style="font-size: inherit;">FTP</span><br></div>
<div>Samba</div>
<div>WEB</div>
Apache
<div>Nginx</div>
<div>IIS</div>
<div>Tomcat</div>
<div>Lighttpd</div>
IP分配
DHCP
<div>PPPoE</div>
<div>PPTP</div>
L2TP
<div>其它</div>
NTP
<div>DNS</div>
<div>SSH</div>
<div>VPN</div>
<div>数据库</div>
数据格式
SQL/NoSQL
<div>JSON</div>
<div>XML</div>
CSV
常用数据库
MySQL
<div>SQL Server</div>
<div>MongoDB</div>
Redis
算法与数据结构
常用工具
基本工具
Git
Vim
Tmux
fzf
终端
TeraTerm
minicom
putty
发包工具
Postman
BurpSuite
抓包工具
tcpdump
wireshark
代码追踪
ctags
cscope
<div>Source Insight<br></div>
调试工具
printf
printk
GDB
strace
Valgrind
网络代理工具
cntlm
proxychain4
proxifier
Fiddler
网络攻击测试工具
hping3
Hyenae
软技能
沟通能力
思维导图
百度脑图
ProcessOn
XMind
<div>FreeMind</div>
MindManager
总结&笔记
Gitbook
Onenote
Evernote
Visio
语雀
博客
Hexo
Hugo
CSDN
知乎专栏
Markdown
Typora
VSCode
计划清单
奇妙清单(可用于团队协作)
Todolist
远程协作
TeamViewer
AnyDesk
Skype
VNC
Shell编程
shell环境
shell
sh
bash
zsh
oh my zsh
csh
常用变量
$PATH<br>
$HOME
$USER
$PS1
env
alias
常用指令
打印输出
echo
printf
文本编辑
grep/egrep/fgrep
sed
awk
用户&组
用户
useradd
userdel
usermod
passwd
who
whoami
组
groupadd
groupdel
groupmod
时间
date
sleep
文件系统
常见操作
cd
pwd
touch
rm
mv
mkdir
rmdir
cp
ln
ls
查看
cat
less
more
tail
head
tee
信息
tree
wc
file
stat
size
strings
hexdump
objdump
权限
chown
chmod
chgrp
umask
查找
find
whereis
which
裁剪
truncate
cut
备份&压缩
dd
tar
zip/unzip
加密
md5sum
openssl
进程
ps
pstree
pidof
top/htop
kill
killall
磁盘
fdisk
df
du
mount
umount
mkfs
网络
常用
ifconfig
netstat
lsof
arp
nslookup
测试
nc
ping/ping6
arping
traceroute/traceroute6
抓包
tcpdump
流量
iperf3
tc
路由
route
ip route
无线
iwconfig
iwlist
iwpriv
防火墙
iptables
ebtables
下载传输
tftp
scp
wget
curl
系统
常用信息
id
hostname
sar
uptime<br>
uname -a
sysctl
lsb_release -a
硬件信息
lspci
lsusb
cat /proc/cpuinfo
内核模块
lsmod
insmod
日志
dmesg
内存
free
cat /proc/meminfo
cat /proc/slabinfo
终端
ssh
telnet
硬件
flash
nandwrite
nanddump
nandtest
ubi
ubiattach
ubidetach
ubimkvol
ubinfo
ubinize
uci
switch
swconfig
brctl
语法
文件头部
#!/bin/sh
变量
定义
name=value
引用
$name
${name}
"${name}"
可以防止tab等字符被转换为空格
分割
语法
<font color="#f15a23">#</font> 删除变量左侧的最短匹配;<font color="#f15a23">##</font> 删除变量左侧的最长匹配
<font color="#f15a23">%</font> 删除变量右侧的最短匹配;<font color="#f15a23">%%</font>删除变量右侧的最长匹配
举例
<font color="#f15a23">${file##*/}</font> 以/为分隔符,删除最后一个/往左的所有字符
<font color="#f15a23">${file%/*}</font> 以/为分隔符,删除最后一个/往右的所有字符
参数
$# 参数个数
$0 当前执行脚本的名称
$1 ... $n 第1,2,...n个参数
$* 传递脚本的所有参数,加双引号时为一个字符串“$1 $2 ... $n”
$@ 传递脚本的所有参数,加双引号时为"$1" "$2" ... "$n"
$? 最后命令的退出状态
运算符
算数运算符
+ - * / % = == !=
`expr 2 + 4`
关系运算符
-eq 值相等
-ne 值不相等
-gt 值大于
-lt 值小于
-ge 值大等于
-ne 值小等于
布尔运算符
! 非运算
-o 或运算
-a 与运算
逻辑运算符
&& 逻辑与
|| 逻辑或
字符串运算符
= 字符串相等返回true
!= 字符串不相等返回true
-z 字符串长度为0返回true
-n 字符串长度不为0返回true
文件测试运算符
-b 块设备文件检测
-c 字符设备文件检测
-d 文件目录检测
-f 普通文件检测
-r 文件可读检测
-w 文件可写检测
-x 文件可执行检测
-s 文件不为空检测
-e 文件存在检测
-p 有名管道检测
-g 设置SGID位检测
-k 粘着位检测
操作符
$(command)
`command`
$(( a + 1 )) 数学运算
[ conditions ] 相当于test指令
数学运算
`expr $a + 1`
$(( a + 1 ))
let a=a+1<br>
条件结构
if
if else
if elif else
case
循环结构
for
while
until
跳出循环
break
continue
函数
function funname(){}
重定向
> 输出重定向,覆盖
>> 输出重定向,追加
< 输入重定向
>& 合并,如2>&1将标准错误输出重定向值标准输出
文件包含
. filename
source filename
其它相关
set
eval
正则表达式
嵌入式Linux开发
Linux 基础
历史
GNU
Linux内核
标准
POSIX
SUSv3
SUSV4
基本概念
内核
shell
用户 组
文件I/O模型
程序
进程
线程
静态库和共享库
信号
系统编程
系统调用
库函数
标准C函数库
可移植性
内存分配
分配
堆
malloc
realloc
calloc
堆栈
alloca
释放
free
用户和组
/etc/passwd
getpwnam
getpwuid
/etc/shadow
getspnam
getspent
/etc/group
getgrnam
getgrgid
系统
系统限制和选项
sysconf
pathconf
fpathconf
系统和进程信息
/proc
uname
时间
time/stime
gmtime/localtime
strftime/strptime
asctime
mktime
ctime
gettimeofday/settimeofday
定时器与休眠
定时器
settimer
alarm
休眠
sleep
nanosleep
文件
文件I/O
文件I/O模型
open
read
write
close
lseek
ioctl
备选I/O模型
I/O多路复用
select
poll
epoll
文件I/O缓存
文件系统
磁盘分区
i节点
VFS
日志文件系统
Reiserfs
ext3
JFS
XFS
ext4
Btrfs
挂载、卸载
mount
umount/umount2
文件属性
基本属性
文件信息
stat
文件时间戳
utime/utimes
utimensat/futimens
文件属主
chown/fchown/lchown
文件权限
access
umask
chmod/fchmod
扩展属性
shell
setfattr/getfattr
系统调用
setxattr/getxattr/listxattr
lsetxattr/lgetxattr/llistxattr
fsetxattr/fgetxattr/flistxattr
访问控制列表ACL
shell
setfacl/getfacl
系统调用
acl_set_file/acl_get_file
acl_from_text/acl_to_text
acl_set_tag_type/acl_get_tag_type
acl_set_qualifier/acl_get_qualifier
acl_set_permset/acl_get_permset
acl_create_entry/acl_get_entry/acl_delete_entry
acl_get_perm/acl_add_perm/acl_delete_perm/acl_clear_perms
目录与链接
目录
mkdir/rmdir
opendir/readdir
getcwd
chdir/fchdir
chroot
链接
硬链接
link/unlink
软链接
symlink/readlink
移除
remove
文件树遍历
nftw
解析路径
realpath
dirname/basename
监控文件事件
inotify_init
inotify_add_watch
信号
基本概念
信号类型
标准信号
实时信号
信号集
sigemptyset/sigfillset
sigaddset/sigdelset
sigismember
信号处置
signal
sigaction
信号掩码
sigprocmask
等待状态的信号
sigpending
发送信号
kill
raise/killpg
等待信号
pause
信号处理函数
可重入函数
终止信号处理
sigsetjmp/siglongjmp
abort
备选栈中处理信号
sigaltstack
SA_SIGINFO标志(获取附加信息)
系统调用的中断和重启
SA_RESTART
高级特性
coredump
/proc/sys/kernel/core_pattern
特殊情况
SIGKILL/SIGSTOP
SIGCONT
硬件产生的信号
SIGBUS/SIGFPE/SIGILL/SIGSEGV
实时信号
sigqueue
使用掩码等待信号
sigsuspend
使用同步方式等待信号
sigwaitinfo
sigtimedwait
通过文件描述符获取信号
signalfd
进程
基本概念
进程凭证
创建&终止
监控子进程
程序执行过程
进程间通信
通信
数据传输
字节流
管道
FIFO
流socket
伪终端
消息
SystemV消息队列
POSIX消息队列
数据报socket
共享内存
SystemV共享内存
POSIX共享内存
内存映射
匿名映射
映射文件
信号
标准信号
实时信号
同步
信号量
SystemV信号量
POSIX信号量
命名信号量
无名信号量
文件锁
“记录”锁(fcntl())
文件锁(flock())
互斥(线程)
条件变量(线程)
进程组
进程优先级和调度
DAEMON
线程
创建&终止
线程同步
互斥量
<div><span style="font-size: inherit;">条件变量</span><br></div>
线程安全
线程取消
共享库
<div> 网络编程</div>
<div>库函数</div>
Socket API
基本API
bind
<div>listen</div>
<div>connect</div>
<div>accept</div>
<div>send/recv</div>
<div>sendto/recvfrom</div>
<div>close</div>
<div>其它API</div>
<div>第三方</div>
libevent
SOCKET
UNIX DOMAIN
Internet DOMAIN
服务器设计
迭代型
<div>并发型</div>
Linux内核
学习路线
Linux Kernel Development, 3rd
<div>Understanding the Linux Kernel</div>
<div>Linux Device Drivers, 3rd<br></div>
<div>Linux内核源代码情景分析<br></div>
<div>源码</div>
架构
进程调度
内存管理
虚拟文件系统VFS
<div>网络子系统</div>
<div>IPC</div>
<div>内核模块</div>
<div>驱动</div>
收藏
0 条评论
下一页