- 博客(586)
- 收藏
- 关注
原创 JJJ:内核格式化输出
是 Linux 内核中用来打印 cpumask 的特殊格式字符串。(假设系统有 4 个 CPU(nr_cpu_ids = 4))是可选的,表示使用列表格式而不是十六进制掩码格式。:指向cpumask结构体中的位图的指针。表示以位图(bitmap)格式打印。表示需要两个参数:宽度和指针。:系统中cpu的数目。
2025-05-29 09:56:03
181
原创 JJJ:linux如何修改网卡ip
首先确认一个空闲的ip地址,ping之不通,则说明是空闲的ip。比如这个ip为192.168.2.168,ping不通它。比如我要修改eth0这个网卡的ip为它。注意一定要先关闭网卡,在修改ip。
2025-04-14 15:10:57
117
原创 JJJ:generic netlink例程分析
(generic netlink协议在nl_table下面的sock由genl_init -》register_pernet_subsys -》genl_pernet_init -》 netlink_kernel_create中创建并放入到nl_table对应generic netlink下面的哈希表中)调用具体协议族的proto_ops的sendmsg hook,本次会调用发送方所属于的netlink协议族,netlink_sendmsg。#在自己构造的netlink数据结构中。
2025-04-05 17:16:04
460
转载 JJJ:linux idr
IDR(ID Radix Tree)是 Linux 内核中的一种整数管理机制,用于将整数 ID 与指针关联起来。IDR 提供了一种高效的方式来分配和管理唯一的整数 ID,并将这些 ID 映射到相应的指针。在 Linux 内核中,整数 ID 是用于唯一标识各种系统资源或对象的数字。通过将整数 ID 与指针关联,可以快速、高效地管理和访问内存中的资源或对象。这种机制简化了内核的资源管理过程,提高了系统的性能和可靠性。
2025-03-31 22:12:21
97
原创 JJJ:amixer指令简介
是Linux音频架构ALSA中的Alsa工具的其中一个,用于配置音频的各个参数。基于文本下的图形界面的,可以通过键盘的上下键,左右键等,很方便地设置需要的音量,开关某个switch(开关)等等操作。
2025-03-13 14:20:10
398
原创 JJJ:linux sysfs相关
sysfs是一个基于内存的虚拟的文件系统目录简介/sys/block存放块设备,提供一设备名(如sda)到/sys/devices的符号链接;/sys/bus按总线类型分类,在某个总线目录之下可以找到链接该总线的设备的符号链接,指向/sys/devices. 某个总线目录之下的drivers目录包含了该总线所需的所有驱动的符号链接。对应kernel中的struct bus_type;/sys/calss。
2025-03-07 10:34:02
1347
原创 JJJ:fread返回值分析
当目标还有字节可读时,返回实际读到的字节数。尽量读参数指定的长度,不够的话就能读多少读多少。一共十个字节(可能是是一个,读到的第十一个字节ascii码为101)第二次读了3个字节,是: 9、0、换行。无字节可以读时,返回0或者负数。第三次就没字节可以读了,返回0。),fread返回值为8。
2025-03-03 21:12:50
203
原创 JJJ:linux时间子系统相关术语
在传统系统中,CPU 会定期接收时钟中断(ticks),即使它处于空闲状态。这些周期性的时钟中断会导致 CPU 不必要地从低功耗状态唤醒,增加了能耗并减少了电池寿命。通过减少不必要的时钟中断,使 CPU 能够更长时间地保持在低功耗状态。
2025-01-27 14:02:14
818
原创 JJJ:Linux - 高精度定时器 hrtimer
clock_dev硬件中断-》tick_handle_periodic-》tick_periodic-》update_process_times-》run_local_timers。如果你希望高精度定时器只执行一次而不是重复执行,可以在回调函数中返回 HRTIMER_NORESTART 而不是 HRTIMER_RESTART。用于在高精度定时器的回调函数中,向前推进定时器的到期时间。定时器回调函数在软中断上下文中执行,因此不应该在回调函数中执行可能会阻塞的操作。在回调函数中,你可以执行需要的操作。
2025-01-24 09:19:34
338
原创 JJJ:arm64架构下的asid相关
如果没有空闲的硬件ASID,把全局ASID版本号加1,重新从1开始分配硬件ASIDA.因为刚分配的ASID可能和某个进程的硬件ASID相同,只是ASID版本号不同,页表缓存可能包含了这个进程的页表项,所以必须把所有处理器的页表缓存清空。处理器给进程分配ASID时,如果ASID分配完了,那么把全局ASID加1,重新从1开始分配ASID,针对每个处理器,使用该处理器的reserved_asids保存该处理器正在执行的进程的ASID,并且把该处理器的active_asids设置0。
2025-01-21 16:02:27
1322
原创 JJJ:per-cpu变量
在单处理器系统上,这个变量声明与常规的变量声明没有不同;再有若干cpu的SMP系统上,会为每一个cpu创建一个该变量的实例。所需的数据很可能存在于处理器的缓存中,通过自己的cpu来访问速度更快。若一个变量可以被多个cpu访问,那么可能会造成冲突。通过指定cpu的id来指定访问对应cpu上的实例。访问当前cpu上的这个变量实例。访问指定cpu上的变量实例。type是其数据类型。
2025-01-18 15:27:20
238
原创 JJJ:static_branch_unlikely和 static_branch_likely
如果静态键被启用(通过 static_branch_enable(&my_static_key)),则会执行 do_something_rare();`static_branch_unlikely 是 Linux 内核中用于优化分支预测的一个宏,它与静态键(static key)机制结合使用,以提高代码性能。static_branch_unlikely(&my_static_key) 表示编译器应该假设这个条件分支不太可能为真。STATIC_KEY_INIT 初始化一个静态键,默认是禁用状态。
2025-01-17 14:42:52
159
原创 JJJ:linux等待队列用法 init_waitqueue_entry
函数用于初始化一个等待队列条目,设置其标志、私有数据和唤醒函数。这是 Linux 内核中管理进程睡眠和唤醒机制的基础部分,确保进程能够在适当的时候被唤醒并继续执行。
2024-12-30 10:18:14
669
原创 JJJ:head unit
是指安装在汽车仪表板上的多媒体控制中心,主要用于播放音乐、广播和其他音频内容。它也是驾驶员和乘客与车辆音响系统交互的主要界面。
2024-12-29 12:08:42
128
原创 JJJ:跃点数
例如如果你有两块网卡同时可以到达同一个目的地址,一个带宽是10m另一个是100m。那么如果你把10m网卡的接口跃点数设置成2,100m的设置成1,那么数据将会优先从100m这个网卡转发出去,因为这个网卡的metric较小。(前提是你是win2000或者winxp系统)当这个网卡连接down掉时候,才会从10m的网卡转发数据。起到浮动路由的作用。路由器有两个接口都可以到达你想要访问的网络,那么它就会把路由表中metric值大的那条忽略,数据流转发到metric值比较小的接口,因为他认为这条路径的速度最快。
2024-12-29 11:59:10
330
原创 JJJ:shell指令man
man 3 lib_call:查看某个libc库的函数接口的用法,如fork。man 1 shell_cmd:查看某个shell指令或者可执行文件的用法。man 2 sys_call:查看某个系统调用接口的用法,如read。
2024-12-08 13:13:43
185
原创 JJJ:结构体定义中常加的后缀:attribute ((packed))
在GCC下:struct my{ char ch;: 的作用就是告诉编译器取消结构体在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关。在GCC下:struct my{ char ch;
2024-08-22 10:03:00
356
原创 JJJ:urb的complete回调流程
1次urb的完成,意味着1次控制传输的完成,可能就是(令牌,data,握手)的3个阶段的完成。块传输和控制传输:process_bulk_intr_td -> finish_td。控制传输:process_ctrl_td -> finish_td。等时传输:process_isoc_td -> finish_td。
2024-08-06 13:52:24
543
原创 JJJ:base64编码和字节字符串&普通字符串
在 URL 或文件名中使用 Base64 编码时,通常会使用 URL 和文件名安全的 Base64 编码,其中 “+” 和 “/” 字符被替换成 “-” 和 “_”,并且不使用填充字符 “=”。Base64 编码使用一组64个字符(A-Z,a-z,0-9,+ 和 /,有时最后一字符用 “=” 替换填充空白)来表示二进制数据。前缀的使用是为了明确指出字符串是以字节的形式存在,而非 Unicode 字符,这对于处理二进制数据或在网络层面上操作数据是非常重要的。在需要将字节字符串转换回普通字符串时,可以使用。
2024-07-09 11:26:15
708
原创 JJJ:rcS脚本是如何被执行到的
parse_inittab 里面会调用 new_init_action(SYSINIT, INIT_SCRIPT, “”),决定了接下去初始化的脚本是INIT_SCRIPT所定义的值。在init_main()函数中会调用parse_inittab(void)函数,parse_inittab(void)函数可以使用一些默认的配置,当/etc/inittab没有配置时。kernel_init执行"/sbin/init",在此程序中,会执行到busybox的init进程入口,init_main.
2024-06-04 20:22:33
424
1
原创 JJJ:linux spi总结
在SPI通信中,主设备通过时钟信号来控制从设备的数据传输,数据的传输是在时钟信号的上升或下降沿进行采样的。在SPI通信中,主设备通过时钟信号来控制从设备的数据传输,时钟信号在传输开始前需要有一个确定的起始状态,时钟极性就是用来指定这个起始状态的电平状态。模式0表示时钟空闲状态为低电平,数据在时钟的下降沿采样,上升沿发送。模式2表示时钟空闲状态为高电平,数据在时钟的下降沿采样,上升沿发送。模式3表示时钟空闲状态为高电平,数据在时钟的上升沿采样,下降沿发送。/ 若采用了这个宏,时钟状态空闲时为高电平。
2024-05-20 21:19:00
296
原创 JJJ:MSB LSB,大小端
例如,在8位二进制数01010101中,MSB为0,LSB为1。LSB则表示二进制数的最低位。MSB表示二进制数的最高位。
2024-05-20 21:11:09
294
原创 JJJ:WARN,WARN_ON,BUG_ON
当满足一些条件时,该函数会输出一条带有调试信息的警告消息,并打印出相应的调用栈信息,以便于开发人员进行调试。不要过度使用,否则会造成系统性能下降。在生产环境中,应该关闭大部分的内核调试功能。
2024-05-20 21:09:32
442
原创 JJJ:ubuntu修改静态ip
网关一般放置在网络边缘,与不同网络相连。网关会对数据包进行协议格式的解析,然后再构建适合目的网络的协议格式,发送到目的网络中。网关需要具备转换不同协议格式的能力,支持数据缓存、分组、组装、再传输等功能,以保证数据的快速、稳定传输。它可以将一个网络的协议格式转换为另一个网络可识别的协议格式,实现不同网络之间的数据传输。转换网关:是一种将不同网络协议进行转换的网关,其主要作用是将数据包格式转换为目标网络可以识别的格式。应用网关:主要用于应用层协议转换,实现HTTP、SMTP、FTP等应用协议之间的转换。
2024-05-20 09:21:35
303
原创 ddr测试&sd卡读写速度测试
注意/dev/zero不产生io,作为读或者写中的一方,可以用来测试纯写或者纯读的速度。time指令可以用来测试其后接指令的执行时间,细节。2、sd卡读速度和写速度测试。
2024-05-16 18:47:33
1920
原创 JJJ:网络子系统的软中断
find_task_by_pid_ns用于查找指定命名空间(namespace)下具有指定进程ID(pid)的任务(即进程)结构体。kthreadd_task 是指向内核线程 kthreadd 的进程描述符(task_struct 结构体实例)的一个全局变量。
2024-04-05 12:41:02
647
原创 JJJ:linux共享中断
内核接收一个中断后,它将依次调用在该中断线上注册的每一个处理程序。如果与它相关的设备并没有产生中断,那么处理程序应该立即退出。这需要硬件设备提供状态寄存器(或类似机制),以便中断处理程序进行检查。只要有任何一个设备没有按规则进行共享,那么中断线就无法共享了。多个设备共享一个中断号,共享同一中断的各个中断设备的中断处理程序形成一个链表,内核对每个中断处理程序都要执行(有产生中断的设备本该靠边站的,它的中断处理程序也被执行了)。2、该线上的所有已注册处理程序都指定了SA_SHIRQ。1、中断线当前未被注册。
2024-04-01 21:10:20
222
原创 JJJ:linux系统中第一个进程
ramdisk_execute_command 变量的值可以通过内核启动参数 rdinit 来设置。在Linux内核引导过程中,如果用户在命令行参数或GRUB等 bootloader配置中指定了类似 rdinit=/path/to/executable 的参数,内核在初始化initrd之后会尝试执行位于指定路径的可执行文件作为初始化脚本或进程。上面代码片中的两个变量:ramdisk_execute_command 和 execute_command。可以看到第一个进程PID为1,拉起第一个进程的指令为。
2024-03-31 22:03:56
300
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人