Linux启动脚本
rcS文件,rcS文件位于系统根目录下的“/etc/init.d”下。
rcS文件本质是一个bash shell脚本,因此遵循bash脚本的语法规则。
[1] 文件首行必须为“#! /bin/sh”。
[2] 注释一行用“#”。
[3] 基本的赋值语句,如打印字符串。
[4] 打印特殊符号需加“\”。
[5] 逻辑语句、循环语句等。
启动脚本实现的功能
启动脚本可以做很多事情,只要我们需要初始化时配置或者执行的功能,几乎都满足,总结几点下来及常用的有如下几种。
[1] 启动某个进程程序,最常用的,如启动串口收发进程。
[2] 加载驱动模块(.ko文件);如驱动编译成模块时,可以在这里增加加载(insmod/modprobe)驱动模块命令。
[3] 启动其他模块启动脚本,如网络服务。
[4] 配置功能,该项功能比较实用,实现期望系统起来后进行某些配置,如:配置环境变量、创建临时文件(夹)、挂在文件到指定文件夹、设置默认IP参数,以及配置系统主机名称等基础配置。
[5] 其他,如增加打印功能,方便在调试终端(串口)查看初始化过程,或者两者执行间进行延时(sleep)等。
/proc/mtd 各个参数含义 - -linux命令
# cat /proc/mtd
dev: size erasesize name
mtd0: 00100000 00020000 "uboot"
mtd1: 00800000 00020000 "kernel"
mtd2: 00080000 00020000 "oeminfo"
mtd3: 0280000 00020000 "rootfs"
mtd4: 04e80000 00020000 "data"
#
size是本mtd分区的最大字节数空间 ,erasesize是本分区的最小擦除字节数空间(块大小,linux的flash是以块为擦除单位的)
Linux查看磁盘使用情况
# df -h
Filesystem Size Used Available Use% Mounted on
ubi0:rootfs 33.1M 25.2M 8.0M 76% /
devtmpfs 28.5M 0 28.5M 0% /dev
tmpfs 28.7M 0 28.7M 0% /tmp
tmpfs 28.7M 0 28.7M 0% /dev/shm
#
#
# df
Filesystem Size Used Available Use% Mounted on
ubi0:rootfs 33.1M 25.2M 8.0M 76% /
devtmpfs 28.5M 0 28.5M 0% /dev
tmpfs 28.7M 0 28.7M 0% /tmp
tmpfs 28.7M 0 28.7M 0% /dev/shm
#
计算文件夹大小:
#
# du -sh /bin
852.0K /bin
#
#
还可以这样使用
查看根目录/ 下各文件夹的使用情况:
# pwd
/
#
# du -sh ./*
4.0K ./DirUsrPassWord
0 ./FVDB
20.0K ./Hi_Drv_Test
12.0K ./Info20200404
852.0K ./bin
0 ./dev
3.0M ./etc
1.0M ./firmware
8.8M ./lib
0 ./lib32
8.0K ./libexec
0 ./linuxrc
0 ./media
0 ./mnt
0 ./opt
0 ./proc
8.0K ./root
0 ./run
1.8M ./sbin
4.0K ./showUSRdata.sh
0 ./sound
4.0K ./start.sh
0 ./sys
624.0K ./test_bin
0 ./tmp
12.0K ./touch_app
28.8M ./usr
0 ./var
#
df -h 和 du -sh 使用的比较多,一个统计整体磁盘情况,一个看单独指定的目录点使用情况 。
Tmpfs是什么
tmpfs是Linux/Unix系统上的一种基于内存的虚拟内存文件系统,而不是基于块设备,创建时不需要使用mkfs等初始化。
tmpfs可以使用您的内存或swap分区来存储文件。由此可见,tmpfs主要存储 暂存的文件。
它最大的特点就是它的存储空间在VM(virtual memory),VM是由linux内核里面的vm子系统管理的。
有时候,当应用程序使用到Tmpfs时,而在部署的时候如果没有对应用程序占用的内存做足够的评估时, 就有可能把Tmpfs用满,
这个时候就需要调整Tmpfs的大小了,
当然,调整的大小不能大于你机器内存大小, 否则,你只能换机器了,又或是优化你的应用程序。
当要卸载tmpfs文件系统时,意味着你的应用程序使用的共享内存将会被删除, 如果数据较重要,在umount前记得备份。
devtmpfs概述
devtmpfs可以理解为内核创建设备节点的好助手。
devtmpfs 的功用是在 Linux 核心 启动早期建立一个初步的 /dev,
主要是创建设备节点,让一般启动程序不用等待 udev,缩短 GNU/Linux 的开机时间。
2009年devtmpfs出现之前,
/dev/下面的设备节点应该都是udev-daemon收到内核的事件后用mknod程序或者直接调mknod()系统调用创建出来的;
现在基本上不走udev了,几乎所有的设备文件(比如/dev/sda1)都是内核直接创建的。
Linux网络
发送接收函数:
send/sendto函数,只是把应用层的数据拷贝到内核发送缓冲区,并不保证数据一定会被发送到对端,真正执行发送及什么时候发送是由系统(协议栈)决定的,
所以send/sendto函数返回成功,只能说明拷贝成功了,如果在还未发送之前网络断开,则发送失败。
recv/recvform函数,,将内核接收缓冲区的数据拷贝到应用层的buffer中,真正执行接收数据也是由系统层决定的。
一、send/sendto操作
@在阻塞模式下send操作将会等待所有数据均被拷贝到发送缓冲区后才会返回:
如果发送缓冲区可用大小为0或比要发送的数据长度要小,则会阻塞,直到发送缓冲区里的数据被系统发送后,可用缓冲区大小比要发送的数据长度大时,send返回成功,否则一直阻塞等待。
@在阻塞模式下sendto操作不会被阻塞:
UDP没有真正意义上的发送缓冲区,它所做的只是把应用层的缓冲区数据拷贝到下层的协议栈,在此过程中加UDP头,IP头,所以不存在阻塞。
@在非阻塞模式下send操作会立即返回:
如果发送缓冲区可用大小为0,则会立即返回EWOULDBLOCK错误,表示无法拷贝任何数据到发送缓冲区;
如果发送缓冲区可用大小不为0,但小于发送数据的长度,则拷贝可用大小的数据到缓冲区;
@在非阻塞模式下sendto操作也不会阻塞:
二、recv/recvfrom操作
1.在阻塞模式下,recv/recvfrom会一直阻塞到接收缓冲区里有一个字节或一个完整的UDP数据报为止,然后再返回
recv的原型:int recv(SOCKET sd, char *buffer, int len, int flag),
注意到系统并不会等待buffer被填满了再返回,而是一旦有数据被接收到,就立刻返回,因此不要期望实际一次收到的数据长度就恰好等于len。
2.在非阻塞模式下,recv/recvfrom会立即返回
如果接收缓冲区,有至少一个字节或UDP数据报,则会返回接收到的数据大小,如果没有,则返回错误EWOULDBLOCK。
Linux下查看动态库中是否包含某个函数
strings libdrv.so | grep BrdReInitAllGMPU