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. 链接 可执行文件