- 博客(55)
- 收藏
- 关注
原创 在linux内核5.18之后,能否安全地移除force_uaccess_begin()函数?
可以安全地移除force_uaccess_begin()函数,因为它已经没有用处了。之前的内核版本中需要使用该函数来确保用户空间的内存已经准备就绪,但是在现在的内核版本中,已经通过其他方式来保证了这一点。如果在代码中使用了force_uaccess_begin()函数,可以将其替换为access_ok()函数。在linux内核5.18之后,能否安全地移除force_uaccess_begin()函数?如果能,请给出解决方案,最好有代码示例。
2024-03-29 11:08:41
488
原创 如何使用Acrobat Reader 搜索多个PDF文件
如何使用Acrobat Reader 搜索多个PDF文件。选择“所有PDF文档”,然后选择您的PDF文件夹。在计算机上打开Acrobat Reader。单击编辑菜单,然后选择高级搜索。在屏幕上的提示中点击允许。在输入框中输入搜索词。
2024-03-29 10:24:16
644
原创 【无标题】
开始图标->控制面板->硬件和声音->电源选项->更改电源按钮的功能。电脑更新到了w11,合盖的时候自动休眠,很影响体验。windows11 合盖不休眠怎么设置。选择关闭盖子时,不采取任何操作。按照以前的操作设置合盖不休眠。
2024-03-09 15:21:41
593
原创 grep 排除目录搜索
grep的–exclude-dir=参数就是为了排除某个目录的,即不包含等号后面的目录,所以我们可以利用此参数去掉.svn的隐藏目录。–exclude-dir=参数的用法如下:例如:查找当前目录以及子目录下所有包含"test"字符串的代码并打印行号或者–exclude-dir=后面要排除的目录用双引号括起来或者直接接目录名都可以,但是特殊字符必须用转义符表示,例如".svn"中的"."。如果每次都输入–exclude-dir=参数,是不是很慢还容易出错,降低效率呢?
2024-02-28 16:04:49
1229
原创 一文看懂春晚刘谦魔术
step1: 准备4张牌,跟随魔术步骤,见证奇迹step2: 将4张牌平均斯成两份,并叠在一起step3: 将牌堆顶数量为名字字数的牌移到牌堆底step4: 将前三张牌放在牌堆中间并取出牌堆顶的一张牌放到屁股下step5: 南方人、北方人、不确定分别取顶上的1/2/3张牌插入牌堆中间step6: 男生扔掉牌堆顶1张,女生扔掉牌堆顶2张,沃尔玛塑料袋扔掉牌堆顶1张,不确定的扔掉牌堆顶2张step7: “见证奇迹的时刻”,每说一个字取出牌堆顶的一张牌放到牌堆底。
2024-02-14 11:03:32
681
原创 内存溢出 内存泄露 内存越界 堆栈溢出 野指针
4.向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。答案:打印野指针内容,可能是乱码 解读:GetMemory()返回的是栈内存的指针,但是函数执行完完,该栈上内存就会被释放,该指针地址不是NULL,称为野指针,新内容不可知。内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于系统能提供的最大内存。1.什么是内存泄露?
2023-12-27 14:30:00
473
原创 64 bit 进制转换计算器
链接: https://pan.baidu.com/s/13Z8IuPmiAKiGQ1u4LydVNg 提取码: 16js。链接: https://pan.baidu.com/s/1_mG7P_SriwJ7uBb1LD5Q2Q 提取码: 97qq。分享一个64 bit的进制转换计算器,可以实现2进制,10进制,16进制的转换。
2023-12-27 08:06:47
660
原创 怎么开启基于软件标签的kasan, CONFIG_KASAN_SW_TAGS=y
当前使用的交叉编译器版本是gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ,需要替换高版本gcc。更换·成arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-, 可以勾选CONFIG_KASAN_SW_TAGS=y。
2023-12-23 10:42:51
641
原创 内核地址消毒剂(KASAN)
概述Kernel Address SANitizer(KASAN)是一种动态内存安全错误检测工具,主要功能是 检查内存越界访问和使用已释放内存的问题。KASAN有三种模式:通用KASAN基于软件标签的KASAN基于硬件标签的KASAN用CONFIG_KASAN_GENERIC启用的通用KASAN,是用于调试的模式,类似于用户空 间的ASan。这种模式在许多CPU架构上都被支持,但它有明显的性能和内存开销。
2023-12-23 08:50:42
1124
原创 ARM GIC (五)gicv3架构-LPI
ITS将接收到的LPI中断,进行解析,然后发送到对应的redistributor,再由redistributor将中断信息,发送给cpu interface。需要将外设发送的DeviceID,eventID,通过一系列查表,得到LPI的中断号以及该中断对应的target redistributor,然后将LPI中断,发送给对应的redistributor。LPI,和SPI,PPI,SGI有些差别,LPI的中断的配置,以及中断的状态,是保存在memory的表中,而不是保存在gic的寄存器中的。
2023-12-22 07:44:38
2592
1
原创 ARM GIC(四) gicv3架构基础
其中,cpu interface是实现在core内部的,distributor,redistributor,ITS是实现在gic内部的。distribute:distributor对收到的中断源进行仲裁,然后发送给对应的cpu interface。redistributor:PPI,SGI,LPI中断的管理,将中断发送给cpu interface。distributor:SPI中断的管理,将中断发送给redistributor。这个中断生命周期,和gicv2的中断生命周期是一样的。
2023-12-21 23:51:38
1031
原创 ARM GIC(三) gicv2架构
还是刚刚的例子,cpu在响应优先级为4的中断A,当中断A的上半部分完成后,通知GIC,优先级重置(drop priority),GIC将当前的最高优先级中断重置,重置到响应中断A之前的优先级,比如优先级6,那么此时优先级为5的中断B,就可以被cpu响应。ARM的cpu,特别是cortex-A系列的CPU,目前都是多core的cpu,因此对于多core的cpu的中断管理,就不能像单core那样简单去管理,由此arm定义了GICv2架构,来支持多核cpu的中断管理。中断完成,是指cpu处理完中断。
2023-12-21 08:35:47
2077
原创 ARM GIC(二)中断分类
SGI(software-generated interrupts)软件产生的中断,主要用于核间交互,内核中的IPI,inter-processor interrupts就是基于SGI的,中断号ID0 - ID15用于SGI。因为soc中,中断有很多,为了方便对中断的管理,对每个中断,附加了中断优先级。在中断仲裁时,高优先级的中断,会优于低优先级的中断,发送给cpu处理。当cpu在响应低优先级中断时,如果此时来了高优先级中断,那么高优先级中断会抢占低优先级中断,而被处理器响应。以下是中断状态的转移图。
2023-12-21 08:27:40
778
原创 ARM GIC(一) cortex-A 处理器中断简介
因此就需要有一个中断控制器来作为中间的桥接,收集soc的所有中断信号,然后仲裁选择合适的中断,再发送给CPU,等待CPU处理。当对应的中断源有效时,gic根据该中断源的配置,决定是否将该中断信号,发送给CPU。当CPU接受到gic发送的中断,通过读取gic的寄存器,就可以知道,中断的来源来自于哪里,从而可以做相应的处理。其中虚拟中断,是为了实现虚拟化而加入的,在这个系列中,不讨论虚拟中断,只介绍物理中断的相关知识。gic的核心功能,就是对soc中外设的中断源的管理,并且提供给软件,配置以及控制这些中断源。
2023-12-21 08:18:22
662
原创 Linux:查看线程运行于哪个CPU核心上
在多CPU系统中,通过sched_setaffinity()可以设置进程的CPU亲和力,使进程绑定在某一个或几个CPU上运行,避免在CPU之间来回切换,从而提高该进程的实时性能。线程是最小的执行调度单元,线程执行于某个CPU核心之上,或者说某个CPU核心执行此线程。cpu_online_mask :能被scheduler使用的CPU核数。cpu_possible_mask:系统中总的CPU核数,初始化时设置。cpu_present_mask: 系统中实际的CPU核数。ps -eLF 查找 PSR 字段值。
2023-12-21 07:25:25
827
原创 armv8-a发展历程
它引入了使用 64 位宽寄存器执行执行的能力,同时保留了与现有 ARMv7 软件的向后兼容性。这对于小颗粒解密和加密非常有用,因为小颗粒解密和加密太小而无法有效地卸载到硬件加速器,例如 https。这使得 SIMD 矢量化能够应用于更广泛的算法,例如科学计算、高性能计算(HPC) 和超级计算机。ARMv8-A 架构引入了许多变化,从而可以设计出性能显着提高的处理器实现。+/-4GB 寻址范围可在共享库和位置无关的可执行文件中实现高效数据寻址。新的异常模型这降低了操作系统和管理程序软件的复杂性。
2023-12-21 07:20:06
612
原创 ARMv8-A 架构和处理器
ARMv6 进行了多项增强,包括对未对齐内存访问的支持、对内存架构的重大更改以及多处理器支持。此外,还包括对 32 位寄存器内的字节或半字操作的 SIMD 操作的一些支持。ARMv6 架构还提供了一些可选扩展,特别是 Thumb-2 和安全扩展 (TrustZone )。Thumb-2 将 Thumb 扩展为混合长度的 16 位和 32 位指令集。ARMv7-A 架构强制要求 Thumb-2 扩展,并添加了高级 SIMD 扩展 (NEON)。ARMv6 架构中还添加了 M 配置文件,以启用旧架构的功能。
2023-12-21 07:03:35
744
原创 armv8-a 介绍
此外,与迁移到 64 位相关的内存空间使用量的增加可能会导致命中缓存的访问次数下降。例如,这意味着为 ARMv7 Cortex-A 系列处理器编写的 32 位代码也可以在 ARMv8 处理器(例如 Cortex-A57)上运行。64 位处理器可能能够在单个操作中执行相同的任务,通常以同一处理器执行 32 位操作所需的相同速度。Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15 和 Cortex-A17 处理器均实现 ARMv7-A 架构。
2023-12-20 14:30:00
910
原创 trace32查看内存值时bypass cache
在开启mmu和cache时,用trace32查看内存地址默认看到的是虚拟地址。A:访问不经过MMU,但是可能会经过Cache。ANC:跳过MMU和Cache直接访问物理内存。NC:访问经过MMU,不经过Cache。查看bypass cache的物理地址。
2023-12-20 07:57:23
892
原创 vim 一段代码整体移动
可以用ctrl+v,然后上下移动光标,再shift+i进入编辑模式,然后按删除或者空格或者tab键来移动第一行,然后按ESC,就能整段代码动起来了。3.右移的空格数可以在/etc/vimrc中设置参数,在末尾加上set shiftwidth=2,保存即生效。2.点击“esc”键进入命令模式,使用“:m,n>”或":m,n<"左移或右移,m是起始行,n是结束行。或者点击“esc”键进入命令模式,使用set shiftwidth=2。1.点击“esc”键进入命令模式,使用":set nu"显示行号。
2023-06-16 15:13:56
1752
原创 quem+gdb+rootfs+arm64_kernel
http://mirrors.ustc.edu.cn/debian/: 国内 debian 镜像源地址。以使用 qemu-aarch64-static 来模拟成 arm64 环境的执行环境。因为主机跑在 x86 架构上,而我们要制作的文件系统是跑在 ARM64 上,因此可。myrootfs_arm64:本地目录,最后制作好的文件系统会在此目录。通过mount可以查看被挂载到了qemu上的系统的/mnt目录下。使用 chroot 命令切换到刚才制作的根文件系统。后面的选项指定共享目录已经使用的9P协议。
2023-03-05 21:12:41
382
原创 : aclocal-1.15:未找到命令 WARNING: ‘aclocal-1.15‘ is missing on your system.
【代码】: aclocal-1.15:未找到命令 WARNING: 'aclocal-1.15' is missing on your system.
2023-02-20 22:06:00
1828
原创 ubuntu22.4 截图后无法编辑
ubuntu22.4 截图软件发生了改变, 在ubuntu20上使用shift+PntScr是可以区域截图的。现在使用shift+PntScr会截取整个屏幕,点击PntScr会出现下面的情况。可以区域截图、截取某个窗口或者录像。但是区域截图无法编辑,用起来很不方便。以前用的火焰截图在ubuntu22上也出问题了,只能截图,无法编辑。官方说是gnome的问题。这不是Flameshot 的问题。Gnome Wayland 强制其用户使用公共且受限的 API。向他们投诉。我们无能为力。
2023-02-14 23:05:56
902
原创 kernel spin_lock的使用
spin_lock的使用, 由于自旋锁的这个忙等待的特性,注定了它使用场景上的限制 —— 自旋锁不应该被长时间的持有(消耗 CPU 资源)。单核(UP)和多核(SMP)下的spinlock
2023-02-12 20:35:27
451
原创 Crash 变量解析
这种情况比较常见,此时,局部变量必然位于某一级函数的堆栈中,该局部变量可能通过指针一级级向底层函数传递,所以可能位于多个函数的堆栈中,可以从不同的函数堆栈中解析。但解析会比较困难,难点在于难以确认相关变量在堆栈中的具体位置,解析方法很灵活,需要结合相关源代码,仔细分析流程,找到关键的点,更多的取决于分析者的经验和代码理解能力。在分析vmcore的过程中,常常需要解析内核某个流程中的关键变量的值,以便确认故障当时系统的状态,本文主要介绍变量的解析方法,主要分全局变量和局部变量两种情况。
2023-02-11 16:25:33
609
原创 linux内核模块机制api(二) __module_text_address()
linux内核模块机制api(二) __module_text_address()
2023-02-06 17:38:14
119
原创 linux内核模块机制api(一) __module_address()
linux内核模块机制api(一) __module_address()
2023-02-06 17:29:12
236
原创 softlockup
soft/hard lockup 的实现在kernel/watchdog.c中,主题涉及3个部分:kernel线程,时钟中断,NMI中断。lockup是某段内核代码占着CPU不放,lockup分为soft和hard,如果lockup时没有屏蔽中断为soft,若果屏蔽了中断为hard。1 高精度计时器,递增hrtimer_interrupts,唤醒[watchdog/x]内核线程,更新一个时间戳。2 NMI中断时,检查hrtimer_interrupts是否递增,如果没有说明hard lockup。
2023-02-01 21:01:51
682
原创 linux 内核 互斥技术(二)读写信号量
读写信号量是对互斥信号量的改进,允许多个读者同时进入临界区,读者和写者互斥,写者和写者互斥,适合在以读为主的情况使用。申请读锁,如果写者占有写锁或者正在等待写锁,那么进程深度睡眠。尝试申请读锁,不会等待。如果申请成功,返回 1;申请写锁,如果写者占有写锁或者读者占有读锁,那么进程深度睡眠。申请写锁,如果写者占有写锁或者读者占有读锁,那么进程中度睡眠。尝试申请写锁,不会等待。如果申请成功,返回 1;申请读锁的函数如下。申请写锁的函数如下。
2023-02-01 20:50:52
286
原创 linux 内核 互斥技术(一)信号量
解释:在函数中,调用了wake_up_process来唤醒进程,这样进程就从之前的__down_interruptible调用中的timeout=schedule_timeout(timeout)处醒来,wait->up=1, __down_interruptible返回0,进程获得了信号量。(3) 当该进程再一次被调度时,按原因执行相应的操作:如果waiter.up不为0说明进程被该信号量的up操作所唤醒,进程可以获得信号量(返回-EINTR)。同时,该函数的调用不允许中断。@sem:要获取的信号量。
2023-02-01 20:44:37
712
原创 Linux kernel 将buf保存到文件
Linux-5.0.0前的内核使用set_fs( get_ds() ,介于linux-5.0.0和linux-5.10.0之间的内核使用set_fs( KERNEL_DS ),linux-5.10.0之后的内核使用old_fs = force_uaccess_begin();在mm_segment_t fs中只有两个值,USER_DS,KERNEL_DS,分别代表用户空间和内核空间,默认情况为USER_DS,即对用户空间地址检查并做变换。我用的是5.15的内核,编译到get_fs、set_fs会报错。
2023-02-01 20:38:45
1703
1
原创 linux系统使用多个版本gcc
usr/bin/gcc、/etc/alternatives/gcc、/usr/bin/gcc-11均为软连接,查看 /usr/bin/x86_64-linux-gnu-gcc-11的deb包。其中gcc-11是系统自带的版本, 另外1个是新安装的. 按照说明选择需要的版本就完成配置了.which gcc 查看当前gcc。
2023-01-05 13:58:48
1573
原创 QQ Linux 3.0
腾讯正式宣布,QQ Linux 版 3.0 已在 QQ 官网上架,并表示此次大型的版本重构和更新,不仅实现了全新架构,同时还新增了许多符合 Linux 用户日常使用需求的特色功能。下载链接 https://im.qq.com/linuxqq/index.shtml。全新 QQ Linux 3.0 正式上线。ubuntu 上的运行效果。
2023-01-01 11:52:08
319
原创 arm-none-eabi-gdb: error while loading shared libraries: libncurses.so.5: cannot open shared object
arm-none-eabi-gdb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directorysudo apt install libncurses5
2022-10-27 11:38:32
1386
TA创建的收藏夹 TA关注的收藏夹
TA关注的人