嵌入式Linux系统编程
2024-01-05 15:40:44 2 举报
AI智能生成
嵌入式Linux系统编程是指在嵌入式系统中使用Linux操作系统进行软件开发的过程。这种编程主要关注于开发实时、高效且稳定的应用程序,以满足特定硬件资源的需求。在嵌入式Linux系统编程中,开发人员需要熟悉Linux内核、设备驱动程序、文件系统、网络协议等关键组件。他们还需要了解如何根据特定硬件平台进行调整和优化,以保证应用程序能够在有限的资源条件下正常运行。常见的嵌入式Linux系统编程包括硬件初始化、设备驱动程序开发、系统服务定制、应用程序开发等。
作者其他创作
大纲/内容
硬件相关
处理器
CPU厂商
PC
Intel
奔腾
酷睿
AMD
IBM
国产龙芯
手机
高通 Qualcomm
联发科 MTK
Marvell
三星
华为海思
CPU架构
CISC
X86
X86-64(amd64)
RISC
ARM
MIPS
PowerPC
MCU
51系列
STC
Silicon Labs
C8051f120
ST 意法半导体
STM32
STM32F103
STM32F407
TI 德州仪器
MSP430
MSP430g2553
MSP430F5438
MSP430F5529
Arduino
ATMEL
AVR
NXP 飞思卡尔
K60
Renesas 瑞萨
通信
通信方式
USB
WiFi
Serial
ZigBee
Ethernet
Bluetooth
通信协议
SPI
I2C/I2S
UART
USB
CAN(USBCAN)
电子器件
无线芯片
博通 Broadcom
高通 Qualcomm
联发科 MTK
瑞昱 Realtek
Marvell
存储
flash
nand
EMMC
SSD
UFS
nor
RAM
传感器
温度传感器
湿度传感器
烟雾传感器
距离传感器
超声传感器
光电传感器
巡线传感器
红外传感器
红外发射/接收器
红外避障传感器
压力传感器
声音传感器
电子罗盘
三轴加速度计
霍尔传感器
计算机知识
操作系统
嵌入式系统
实时操作系统
FreeRTOS
VxWorks
RT-Thread
μC/OS-II
μClinux
非实时操作系统
Ubuntu
OpenWrt
PC系统
Windows
Linux
Debian
Ubuntu
Centos
Red Hat
OpenSuSE
Arch
Kali
elementary OS
deepin
MAC OS
移动端系统
Android
IOS
WindowsPhone
ubuntu
Symbian
Blackberry
Harmony
计算机网络
802.11
TCP/IP模型
应用层
HTTP/HTTPS
DHCP
DNS
SMTP
POP3
NTP
FTP
SSH
Telnet
传输层
TCP
UDP
QUIC
网络层
IP
ICMP
IGMP
链路层
ARP
PPP
OSI模型
常用服务器
文件传输
Http/Https
FTP
Samba
WEB
Apache
Nginx
IIS
Tomcat
Lighttpd
IP分配
DHCP
PPPoE
PPTP
L2TP
其它
NTP
DNS
SSH
VPN
数据库
数据格式
SQL/NoSQL
JSON
XML
CSV
常用数据库
MySQL
SQL Server
MongoDB
Redis
算法与数据结构
常用工具
基本工具
Git
Vim
Tmux
fzf
终端
TeraTerm
minicom
putty
发包工具
Postman
BurpSuite
抓包工具
tcpdump
wireshark
代码追踪
ctags
cscope
Source Insight
调试工具
printf
printk
GDB
strace
Valgrind
网络代理工具
cntlm
proxychain4
proxifier
Fiddler
网络攻击测试工具
hping3
Hyenae
软技能
沟通能力
思维导图
百度脑图
ProcessOn
XMind
FreeMind
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
$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
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等字符被转换为空格
分割
语法
# 删除变量左侧的最短匹配;## 删除变量左侧的最长匹配
% 删除变量右侧的最短匹配;%%删除变量右侧的最长匹配
举例
${file##*/} 以/为分隔符,删除最后一个/往左的所有字符
${file%/*} 以/为分隔符,删除最后一个/往右的所有字符
参数
$# 参数个数
$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
条件结构
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
线程
创建&终止
线程同步
互斥量
条件变量
线程安全
线程取消
共享库
网络编程
库函数
Socket API
基本API
bind
listen
connect
accept
send/recv
sendto/recvfrom
close
其它API
第三方
libevent
SOCKET
UNIX DOMAIN
Internet DOMAIN
服务器设计
迭代型
并发型
Linux内核
学习路线
Linux Kernel Development, 3rd
Understanding the Linux Kernel
Linux Device Drivers, 3rd
Linux内核源代码情景分析
源码
架构
进程调度
内存管理
虚拟文件系统VFS
网络子系统
IPC
内核模块
驱动
收藏
0 条评论
下一页