Linux
文章平均质量分 57
李小白20200202
无
展开
-
sys和proc文件系统
sysfs是非持久性虚拟文件系统,它提供系统的全局视图,并通过它们的kobject显示内核对象的层次结构(拓扑),每个kobject显示为目录和目录中的文件,目录代表相关kobject导出来的内核变量。这些文件称为属性,可以读取或写入。如果任何已注册的kobject在sysfs中创建目录,则目录的创建位置取决于kobject的父项(它也是object)。这些目录自然创建为kobject父项的子目录。这向用户空间显示了内部对象的层次结构。sysfs中的顶级目录表示对象层次结构的共同祖先,即对象所属的子系统。原创 2024-04-23 14:34:21 · 647 阅读 · 0 评论 -
arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc的区别
两个交叉编译器分别适用于和两个不同的架构,armel 和 armhf 这两种架构在对待浮点运算采取了不同的策略(有 fpu 的 arm 才能支持这两种浮点运算策略)。其实这两个交叉编译器只不过是 gcc 的选项 -mfloat-abi 的默认值不同。原创 2024-04-22 14:58:34 · 291 阅读 · 0 评论 -
linux内核中CMA内存分配
系统长时间运行后,可能碎片化,很难找到连续物理页。连续内存分配器CMA使得这种情况下分配大的连续内存成为可能。转载 2024-02-19 11:16:48 · 27 阅读 · 0 评论 -
linux shell子网掩码与位数转换
mask2cdr (){ local x=${1##*255.} set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*} x=${1%%$3*} echo $(( $2 + (${#x}/4) ))}cdr2mask (){ # Number of args to shift, 255..255, first non-255 byte, zeroes set --转载 2023-10-09 13:45:32 · 58 阅读 · 0 评论 -
Linux strace工具
当发现进程或服务异常时,我们可以通过strace来跟踪其系统调用,“看看它在干啥”,进而找到异常的原因。熟悉常用系统调用,能够更好地理解和使用strace。当然,万能的strace也不是真正的万能。当目标进程卡死在用户态时,strace就没有输出了。这个时候我们需要其他的跟踪手段,比如gdb/perf/SystemTap等。原创 2023-04-04 15:34:25 · 514 阅读 · 0 评论 -
高通模组驱动和拨号程序
高通芯片的模组都一般都不是免驱的,使用GObiNet拨号的比较多。要想使用高通芯片的模组拨号一般有三块内容要移植。原创 2023-03-07 15:38:42 · 435 阅读 · 0 评论 -
glibc和uclibc
glibc下载站点http://ftp.gnu.org/pub/gnu/glibc/ 下载点http://www.gnu.org/software/libc/bugs.html 官网uclibc下载站点https://downloads.uclibc-ng.org/releases/https://uclibc-ng.org/最近在搞mips openwrt框架的东西,mipc的GCC工具链为mipsel-openwrt-linux-gcc,所依赖的libc库为:mipsel-openwrt-linux-u原创 2023-03-07 09:57:37 · 91 阅读 · 0 评论 -
linux 终端设置及读写
Man agettyagetty只用于打开串口。Agetty中会调用login程序,由login程序完成账户认证。Agetty功能打开指定的tty;提示用户登录(login:);获得登录用户名;把用户名传递给login命令login程序功能先检查是不是超级用户;提示用户输入密码(通过getpass()实现);检查密码并检查是否quiet登录;设置登录的用户的ID和组ID,并设置相应的环境变量.原创 2023-02-28 13:48:17 · 246 阅读 · 0 评论 -
Busybox reboot
当reboot命令没有加 -f的时候,直接使用kill发送信号到busybox执行halt_reboot_pwoff函数。我们大部分的重启命令都是直接使用reboot命令,最后走halt_reboot_pwoff流程,直接使用-f的话,直接使用reboot系统调用接口,通知内核,让内核执行重启操作,简单粗暴。以上三步都是在halt_reboot_pwoff里面实现的。halt_reboot_pwoff函数处理流程。发送SIGTERM给所有进程,让进程正常退出。发送SIGKILL给所有进程,将其杀掉。原创 2023-02-27 10:42:27 · 68 阅读 · 0 评论 -
busybox的权限为什么一定要是4755
注意:suid极其危险,不信可以尝试对vim或者rm命令进行设定suid,如果给vim或者rm命令设置了setUID,那么任何文件都能编辑或者删除了,相当于有root权限了。特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效。看看《Linux就该du这么学》 里面有更详细的讲解。如果设置的二进制文件没有执行权限,那么suid的权限显示就是S(大写字母S);让普通用户对可执行的二进制文件,临时拥有二进制文件的属主权限;原创 2023-02-27 10:38:43 · 158 阅读 · 0 评论 -
Fork的两次返回
在创建成功的情况下,子进程执行返回0,是因为一个子进程只有一个父进程,所以无需知道它父进程的id,通过getppid()也就可以获取它的值,而父进程运行时,它需要知道它的至此执行对应的子进程是哪个,因为一个父进程可能会有不止一个的子进程,而且在父进程中也没有可以直接获得其子进程pid的库函数。一般当一个进程的PCB创建好了,这个进程也就存在了,那么此时已经存在两个进程了,一个是父进程,一个是新创建的子进程,子进程若执行则返回0,父进程执行则返回子进程的pid。原创 2023-02-27 10:33:31 · 380 阅读 · 0 评论 -
fork之后是子进程先执行还是父进程先执行
设置完子进程的vruntime之后,检查sched_child_runs_first参数,如果为1的话,就比较父进程和子进程的vruntime,若是父进程的vruntime更小,就对换父、子进程的vruntime,这样就保证了子进程会在父进程之前运行。如果一个进程从min_vruntime更小的CPU (A) 上迁移到min_vruntime更大的CPU (B) 上,可能就会占便宜了,因为CPU (B) 的运行队列中进程的vruntime普遍比较大,迁移过来的进程就会获得更多的CPU时间片。原创 2023-02-27 10:25:44 · 711 阅读 · 1 评论 -
(sleep)被信号中断后失效
在这段代码中我们可以看到113行if后如果为0 那么程序就会执行 sleep(30),然而程序在真正执行的时候,除非你不进行任何的操作,就等着程序运行结束,你可以看到正常现象。就是因为sleep()运行是程序捕获到一个信号,那么这个信号就会中断sleep,去执行信号所指内容,等处理好信号之后,程序会直接跳到sleep的下一行执行,那么即使sleep秒数没有数完,也照样结束。在延时精度要求不高的情况下我认为这个方法是可行的,也希望我的方法能够抛砖引玉,得到更多好的方法;//重新发送可能被屏蔽的信号。原创 2023-02-25 17:07:24 · 454 阅读 · 0 评论 -
进程或线程终止是否会释放锁
当线程A被切换走时(是带着上下文数据1一起被切走的),线程B到来,它的al寄存器中的值为0(线程设置的是自己的上下文数据,互相不冲突),进行交换mutex的值和al寄存器的值(0和0交换),最终B拿到的值是0,发生挂起等待。用ticket–操作举例,虽然他看起来是一行C语言的代码,但是实际上它的底层汇编经历了三个阶段,分别是load命令,减法命令,以及store命令。它的寄存器al的数据现在是0,执行交换操作,将内存中mutex的值交换给A的寄存器al中,此时线程A的al值为1,内存中mutex的值为0。原创 2023-02-21 13:38:44 · 469 阅读 · 0 评论 -
linux下的asm目录,asm代表什么意思
asm是assembly language 的简称,即:汇编语言。asm是一个符号连接,只有在你的主makefile的ARCH 变量赋值,并且编译过一遍内核之后才会指向对应的体系结构,这个文件夹下的东西是体系结构相关的。如:make的时候 /include/asm 指向 /include/asm-x86/转载 2023-02-20 14:12:12 · 590 阅读 · 0 评论 -
RS485三线制和两线制差别
最常用的RS485收发换向方法是程序换向,即由MCU的一个I/O端口控制RS485收发器件的收发使能引脚,在平时使RS485收发器件处于接收状态,如下图,这里485芯片用TI的SN65LBC184,最大速率达到250Kbps,当有数据需要发送时,MCU将RS485收发器件引脚(网络RS485_EN2)置于发送状态,完成数据发送后,再把RS485收发器件切回接收状态。差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的单端信号传输,差分传输在这两根线上都传输信号,这两个信号的振幅相同,相位相反。原创 2023-02-15 17:52:12 · 3170 阅读 · 1 评论 -
jffs2--压缩文件系统
JFFS2 是RedHat的 David Woodhouse 在 JFFS 基础上改进的文件系统,是用于微型嵌入式设备的原始闪存芯片的实际文件系统。JFFS2 文件系统是日志结构化的可读写的文件系统。JFFS2 的优缺点如下:优点使用了压缩的文件格式。最重要的特性是可读写操作。缺点JFFS2 文件系统挂载时需要扫描整个 JFFS2 文件系统,因此当 JFFS2 文件系统分区增大时,挂载时间也会相应的变长。使用 JFFS2 格式可能带来少量的 Flash 空间的浪费。原创 2023-02-13 14:40:01 · 498 阅读 · 0 评论 -
ubus monitor信息分析
贴图日志中的peer参数为00000000的表示是ubusd自己的遍历消息,而不是客户端发送的消息。客户端发送的消息如invoke消息的打印。req结构是发送请求的客户端带来的信息,所以记录的应该是发送请求端的信息。第一个是参数是ubus_client结构中的id。原创 2023-02-09 14:20:30 · 337 阅读 · 0 评论 -
blob blobmsg blobmsg_json什么意思
在openwrt的libubox中提供了blobmsg的库,这是一种什么样的消息呢?下面我们先了解一下下面几个概念。原创 2023-02-08 11:44:05 · 983 阅读 · 0 评论 -
proc文件系统下各参数解析
proc被称为虚拟文件系统,它是一个控制中心,可以通过更改其中某些文件改变内核运行状态,它也是内核提空给我们的查询中心,用户可以通过它查看系统硬件及当前运行的进程信息。原创 2023-02-07 13:18:09 · 516 阅读 · 0 评论 -
libcurl 函数之 curl_easy_setopt 几个选项的设置
该选项设置对接收到的数据的处理函数。一旦libcurl接收到需要保存的数据时,该函数就会被调用,所以该函数可用被调用过多次,每次调用都上送一些数据块,ptr指针指向上报的数据,nmemb表示数据大小,size的值总是为1。原创 2023-02-06 14:00:47 · 401 阅读 · 0 评论 -
在shell脚本中设置-e和 -x
在执行之前打印shell命令。此功能可帮助程序员跟踪其Shell脚本。设置-x选项后,之后执行的每一条命令,都会显示的打印出来;在命令之前输出一个+号,并打印出替换变量后的命令内容;可以分析脚本中但前正在执行什么命令。如果一个命令的返回码不为0,并且调用者未对其进行检查,则shell脚本将退出。此功能使Shell脚本更强大。shell选项既可以添加在脚本中,也可以在执行脚本时指定此选项。原创 2023-02-02 11:18:06 · 1195 阅读 · 0 评论 -
nandflash OOB/ECC
ECC能纠正1个比特错误和检测2个比特错误,而且计算速度很快,但对1比特以上的错误无法纠正,对2比特以上的错误不保证能检测。实现过程就是在存入数据时计算ECC校验,在读出数据时再次计算ECC校验,如果两次计算结果不同,则数据在存储过程中肯定发生了变化,通常是存储某个bit的电气元件电平发生了翻转。如果将它们烧入NAND Flash中,则NANDFlash的驱动程序首先根据OOB的标记略过坏块,然后将一页数据(2048字节)写入后,还会计算这2048字节的ECC较验码,最后将它写入OOB区,如此循环。原创 2023-02-01 17:26:02 · 758 阅读 · 0 评论 -
tar.xz压缩工具使用
只要先 tar cvf xxx.tar xxx/ 这样创建xxx.tar文件先,然后使用 xz -z xxx.tar 来将 xxx.tar压缩成为 xxx.tar.xz。先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。我是在下载phpmyadmin的时候看到这种压缩格式的,phpmyadmin压缩包xz格式的居然比7z还要小,这引起我的兴趣。创建或解压tar.xz文件的方法。xz -z 要压缩的文件。转载 2023-02-01 15:43:52 · 151 阅读 · 0 评论 -
YAFFS2(Yet Another Flash File System)
(Page),文件内的数据是存储在固定512 bytes的页中,每一页亦会有一个对应的16 bytes的Spare(OOB,Out-Of-Band)。(Tree Node Structure),由多个树节点(Tree Node,Tnode)所组成,树节点又分成。(Linear Search)的方式(JFFS2是Link List的方式)。(wear-leveling)算法,因此还是会造成部分的块(Block)过度访问。(Partial Page Programming)(YAFFS仍使用)。原创 2023-02-01 15:40:26 · 101 阅读 · 0 评论 -
使用buildroot制作根文件系统
在顶层Makefile中修改交叉编译链。工具,这个工具仅提供了基本的根文件目录,一些第三方库则需要自己手动移植。buildroot工具则在busybox的基础上,整合了一些第三方库,在构建时可以按需选择,更加方便。编译完成的结果放在 output/images 目录,.ext4格式的可以直接烧写到sd卡,.tar的可以解压到nfs挂载。由于在编译buildroot时还用到了busybox,所以将busybox也配置一下,源码在。如果需要下载的插件太大,可以手动下载,保存到源码目录下的dl文件夹中。原创 2023-01-12 16:29:58 · 147 阅读 · 0 评论 -
Linux GPIO Key
gpio-key是基于input架构实现的通用gpio按键驱动,该驱动是基于platform_driver架构,实现了驱动和设备的分离,符合linux设备驱动模型的基本思想。可以定义gpio key, 给不同的gpio选择不同的键值,个人觉得这种方式比较正规,包括遥控按键的上报也是用这种方式。选择单个的gpio作为一个input event来上报,这样的方式的优点是按键比较独立,缺点是如果key比较多会生成比较多的input event;代码不需要我们修改,只需要解其中的实现流程就好。转载 2023-01-12 16:03:50 · 111 阅读 · 0 评论 -
Linux input子系统
input 子系统就是管理输入的子系统,和pinctrl、gpio 子系统一样,都是 Linux 内核针对某一类设备而创建的框架。按键、鼠标、键盘、触摸屏等都属于输入设备,linux内核为此专门做了一个叫做input子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了input框架,用户只需要负责上报输入事件,比如按键值、坐标等信息。对于驱动编写者而言不需要去关心应用层的事情,我们只需要按照要求上报这些输入事件即可。原创 2023-01-12 15:29:18 · 42 阅读 · 0 评论 -
高通芯片发展简介
高通芯片发展简介原创 2023-01-10 13:03:25 · 831 阅读 · 0 评论 -
Shell 脚本调用另一个脚本的三种方法
在脚本中定义,仅在当前Shell脚本中有效,其他Shell脚本进程不能访问,其作用域从定义的位置开始,到脚本结束或被显示删除的地方为止。注意,全局变量既可以在Shell函数内定义,也可以在Shell函数外定义,因为Shell函数内定义的变量默认为 global,且作用域从“函数被调用时执行变量定义的地方”开始,到脚本结束或被显示删除的地方为止。所以,使用export命令我们申明的是临时环境变量,在当前shell会话中,所有的shell实例都可以访问由export命令申明的临时环境变量。转载 2023-01-09 14:49:36 · 1718 阅读 · 0 评论 -
线程锁原理
同样,在对象释放锁之前,它会刷新其高速缓存,强制使已做的任何更改都出现在主内存中。这样,会保证在同一个锁上同步的两个线程看到在synchronized 块内修改的变量的相同值。通过Java的字节码或者C程序的汇编指令看,我们编写的语句,都是由多个机器指令完成的,所以会出现多个线程在CPU执行指令顺序无法预测,从而导致对数据处理结果会出错。一般来说,线程以某种不必让其他线程立即可以看到的方式(不管这些线程在寄存器中、在处理器特定的缓存中,还是通过指令重排或者其他编译器优化),不受缓存变量值的约束。原创 2023-01-08 22:05:14 · 337 阅读 · 0 评论 -
wifi芯片为什么需要时钟源?
由于晶振具有非常好的频率稳定性和抗外界干扰的能力,所以,晶振是用来产生时钟信号的,通过时钟信号来控制电路工作。通讯系统用的信号发生器的信号源,绝大部分也用的是石英晶体振荡器,通讯系统对晶振的精准度也有比较高的要求。晶振是时钟电路中最重要的部件,它的主要作用是向显卡、网卡、主板等配件的各部分提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题。wifi芯片会有自己的固件程序,是一个小型的独立运行系统,也需要像Linux的OS时钟一样,需要一个时钟源。原创 2023-01-08 11:54:41 · 320 阅读 · 0 评论 -
时钟源和系统时钟
脉冲信号接到中断控制器8259A_1的0号管脚,触发一个周期性的中断,我们就把这个中断叫做时钟中断,时钟中断的周期,也就是脉冲信号的周期,我们叫做“滴答”或“时标”(tick)。系统时间是以“时钟滴答”为单位的,而时钟中断的频率决定了一个时钟滴答的长短,例如每秒有100次时钟中断,那么一个时钟滴答的就是10毫秒(记为10ms),相应地,系统时间就会每10ms增1。OS时钟输出脉冲信号,接到中断控制器上,产生中断信号,触发后面要讲的时钟中断,由时钟中断服务程序维持OS时钟的正常工作。原创 2023-01-08 11:53:18 · 1321 阅读 · 0 评论 -
控制台和终端区别
而终端是通过串口连接上的,不是计算机自身的设备,而控制台是计算机本身就有的设备,一个计算机只有一个控制台。计算机启动的时候,所有的信息都会显示到控制台上,而不会显示到终端上。计算机操作系统中,与终端不相关的信息,比如内核消息,后台服务消息,都可以显示到控制台上,但不会显示到终端上。简单的说,能直接显示系统消息的那个终端称为控制台,其他的则称为终端(控制台也是一个终端)。控制台的概念与终端含义非常相近,其实现在我们经常用它们表示相同的东西,但是在计算机的早期时代,它们确实是不同的东西。原创 2023-01-08 11:51:21 · 342 阅读 · 0 评论 -
Linux namespace如何理解
Namespace是对全局系统资源的一种封装隔离,使得处于不同namespace的进程拥有独立的全局系统资源,改变一个namespace中的系统资源只会影响当前namespace里的进程,对其他namespace中的进程没有影响。namespace 是 linux 内核提供的特性,为虚拟化而生。随着 docker 的诞生引爆了容器技术,也把长期在后台默默奉献的 namespace 技术推到了大家的面前。原创 2023-01-08 11:49:03 · 43 阅读 · 0 评论 -
Linux xfrm 框架详解
Linux引入XFRM是在不打乱原有的网络协议结构和HOOK点安全架构设计前提下,成功引入了一种基于策略的高扩展性的网络安全架构。有人会说在HOOK点也能实现IPSEC的问题,为何还要XFRM?!!好问题,但是不是一两句话能把你说明白,只有去设计一安全网络系统才能深深体会到好处。这里就不过多描述。 XFRM 框架数据接收协议(如AH/ESP,与TCP/UDP并列属于4层网络协议) XFRM 框架数据发送协议(相当于虚拟网卡驱动)XFRM 框架策略引擎(与策略路由整合再一起)XFRM的正确读音是t原创 2023-01-08 11:47:48 · 791 阅读 · 0 评论 -
Linux Systemd详解
这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录。原创 2023-01-08 11:04:08 · 216 阅读 · 0 评论