Linux相关

参考https://github.com/xiaowenxia/embedded-notes/blob/master/linux.md#%E7%B3%BB%E7%BB%9F%E5%85%B3%E6%9C%BA%E5%91%BD%E4%BB%A4

Linux指令

系统关机指令

  • shutdown: 安全地将系统关机
  • halt: 调用shutdown -h (halt means stop)
  • reboot: 工作过程差不多跟halt一样,不过是引发主机重启
  • poweroff: halt的软链接
  • init: 所有进程的祖先,它的进程号始终为1,init 0为关机,init 1为重启

查看文本

  • cat
  • tac (cat的反向指令,从最后一行倒叙显示全部内容)
  • sed
  • head
  • tail
  • more
  • less
  • nl (cat -n 显示时输出行号)

mount 挂载linux系统外的文件

命令格式 mount [-t vfstype] [-o options] device dir
如 mount -t nfs 192.168.0.1:/tmp /mnt/nfs

lsusb 显示系统中以及连接到系统的USB总线信息的工具

列出USB详细信息 lsusb -v
列出有多少USB设备 find /dev/bus
打印特定设备的详细信息 lsusb -D /dev/bus/usb/008/002

lsof 列出当前系统打开文件的工具

1
2
3
4
5
6
7
8
9
10
$ sudo lsof
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 3,3 1024 2 /
init 1 root rtd DIR 3,3 1024 2 /
init 1 root txt REG 3,3 38432 1763452 /sbin/init
init 1 root mem REG 3,3 106114 1091620 /lib/libdl-2.6.so
init 1 root mem REG 3,3 7560696 1091614 /lib/libc-2.6.so
init 1 root mem REG 3,3 79460 1091669 /lib/libselinux.so.1
init 1 root mem REG 3,3 223280 1091668 /lib/libsepol.so.1
init 1 root mem REG 3,3 564136 1091607 /lib/ld-2.6.so

linux软件开发知识点

linux进程间通讯方式:

  1. 管道(pipe)及有名管道(named pipe)
  2. 信号(Signal)
  3. 报文(Message)队列(消息队列)
  4. 共享内存
  5. 信号量(semaphore)
  6. 套接口(Socket)

内存申请函数

  1. alloc 向栈申请内存,不用释放内存
  2. calloc
  3. malloc 向堆申请内存,需要释放
  4. realloc

linux内存分配

内存区 存放数据 备注
静态存储区 静态数据、全局数据、常量 在程序编译的时候就已经分配好
栈 局部变量、函数参数 栈内存分配运算内置于处理器的指令集中(push),效率很高,但是分配的内存容量有限
堆区 malloc申请的内存 动态内存分配,需要手动释放,会出现内存泄露风险
代码区 代码 存放函数体的二进制代码
文字常量区 常量字符串 程序结束后由系统释放

gcc编译过程

  1. 预编译 生成*.i
  2. 编译 生成*.s
  3. 汇编 生成*.o
  4. 链接 可执行文件