自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 ubuntu 18.04安装自己ko驱动&& 修改secure boot

报错:insmod: ERROR: could not insert module netlink_test.ko: Operation not permitted。保存设置以后,重启电脑。重新insmod 还是不行,报错Operation not permitted。因为本人老折腾自己的电脑,所以老重装系统,然后配置又不见了,这次配置赶紧记下来。如下图能看见进入bios的话,需要在开机的时候按住F10。进入bios 以后 ,设置这个为空 就行。

2023-11-08 16:16:26 639

原创 epoll 定时器

epoll定时器

2023-10-10 20:06:52 322

原创 kthread_create使用demo

kthread_run():区别就是kthread_run()封装了kthread_create+wake_up_process。但是这并不意味着kthread_run就比kthread_create好,如果创建的 thread 运行在指定的 cpu 上,就就必须用kthread_create+kthread_bind(绑定)+wake up。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;运用场景:内核线程是工作在内核空间的,不属于任何一个进程,可以发生睡眠。

2023-09-20 09:07:41 188

原创 getopt_long函数解析

getopt_long函数

2023-09-14 15:16:21 102

原创 栈trace(kprobe)

与事件跟踪器类似,不需要通过 current_tracer 激活。相反,通过 /sys/kernel/tracing/kprobe_events 添加探测点,并通过 /sys/kernel/tracing/events/kprobes//enable 启用它。kprobe 无法清除。关机重启也不行,问过大佬说是我打得包有问题,有人做了usb的特殊处理。打印栈,是对函数流程有一个大致的理解,然后选定函数。而且不要选择static 的函数。这是一个大佬的sh 脚本。或者 清除所有探测点。

2023-09-08 19:58:50 175

原创 perf与simpleperf

对事件进行采样,然后根据采样频率,评估各个函数的调用频率。可以用来分析CPU cache,CPU迁移,指令周期等各种硬件事件,他也可以对感兴趣的事件进行动态追踪。

2023-09-07 10:35:10 241

原创 安卓常用节点汇总

查看设备树。

2023-09-04 10:30:59 212

原创 dynamic debug

pr_debug,dynamic debug

2023-09-02 18:47:01 84

原创 minicom 配置

minicom,关机充电,高通,mtk

2023-09-02 18:08:37 75

原创 uevent机制

Uevent 提供了 “用户空间通知” 的功能实现,通过该功能,当内核中有 kobject 的增加、删除、修改等动作是,会通知用户空间(udev-udevd)。这种机制通常用于设备驱动程序、热插拔事件以及设备状态变化等场景,以便用户空间应用程序能够在这些事件发生时做出相应的响应。(图片来自参考链接)"uevent" 是 Linux 系统中的一种事件通知机制,发现基本所有的下面都有这个uevent,这是干嘛用的?(目前先了解这么多,后续工作要是遇见了会补充)

2023-09-01 08:59:13 236

原创 IIO驱动 Industrial I/O(正点原子笔记)

最近看见很多iio 驱动adc,赶紧找来学习一下。传感器内部都会有ADC,传感器对外提供 IIC或者 SPI 接口,SOC 可以通过 IIC 或者 SPI 接口来获取到传感器内部的 ADC 数值,从而得到想要测量的结果。Linux 内核为了管理这些日益增多的 ADC 类传感器,特地推出了 IIO 子系统IIO 子系统使用结构体 iio_dev 来描述一个具体 IIO 设备第 477 行,modes 为设备支持的模式,INDIO_DIRECT_MODE 提供 sysfs 接口。

2023-08-30 10:17:25 474 1

原创 module_platform_driver与platform_driver_register

module_platform_driver与platform_driver_register

2023-08-22 08:59:01 214

原创 platform (正点原子笔记)

platform 的device与driver

2023-08-21 10:06:16 72

原创 安卓模块编译的两种方法

安卓编译:mk与bp

2023-08-17 20:08:59 101

原创 dpkg: 警告: 无法找到软件包 *** 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。

安卓的时候全部选择“enter”/n;

2023-08-17 11:22:02 805

原创 异步通知&& 信号处理(正点原子笔记)

信号,驱动主动上报给应用程序

2023-08-17 08:59:26 29

原创 Linux 阻塞和非阻塞 IO 实验&&等待队列/轮询(select,epoll,poll)(正点原子笔记)

等待队列,epoll,poll等

2023-08-16 10:29:47 69

原创 2> /dev/null (shell)

默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是。重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。1 —— stdout (标准输出)2 —— stderr (标准错误)标准输出进了黑洞,错误输出打印到屏幕。0 —— stdin(标准输入)

2023-08-14 20:58:38 153 2

原创 ftrace使用

Linux 提供了一系列的动态追踪机制工具,比如:(1)perf:官方的 Linux 分析器。它非常适合 CPU 分析(堆栈跟踪采样)和 PMC 分析,并且可以检测其他事件,通常记录到输出文件以进行后处理。(2)ftrace:官方的 Linux 追踪器,它是一个由不同的追踪工具组成的多功能工具。它适用于内核代码路径分析和资源受限的系统,因为它可以在没有依赖关系的情况下使用。

2023-08-14 08:47:09 179 1

原创 printk

printk 可以根据日志级别对消息进行分类,一共有 8 个消息级别,这 8 个消息级别定义在文件 include/linux/kern_levels.h 里面一共定义了 8 个级别,其中 0 的优先级最高,7 的优先级最低。如果要设置消息级别,参考如下示例:若用 printk 的 时 候 不 显 式 的 设 置 消 息 级 别 , 那 么 printk 将 会 采 用 默 认 级 别。

2023-08-13 15:21:51 38 1

原创 如何查看config有没有编译进去(安卓)

将他拉出来解压,能看出许多config。adb shell以后。

2023-08-11 20:19:16 53

原创 内核定时器+内核中断demo(正点原子笔记)

内核定时器,中断,上半部下半部

2023-08-06 16:21:49 102

原创 linux的并发与竞争&& 原子锁/自旋锁/信号量(正点原子笔记)

自旋锁,信号量

2023-08-04 08:42:12 33

原创 pinctl与gpio子系统(正点原子笔记)

L inux 内核针对 PIN 的配置推出了 pinctrl 子系统,对于 GPIO的配置推出了 gpio 子系统。

2023-08-03 16:24:39 175

原创 设备树简单描述(正点原子笔记)

以前的 Linux 内核中 ARM 架构并没有采用设备树。在 Linux 内核源码中大量的 arch/arm/mach-xxx 和 arch/arm/plat-xxx 文件夹,这些文件夹里面的文件就是对应平台下的板级信息。上述代码中的结构体变量 smdk2440_fb_info 就是描述 SMDK2440 这个开发板上的 LCD 信息的;结构体指针数组 smdk2440_devices 描述的 SMDK2440 这个开发板上的所有平台相关信息。

2023-07-30 20:35:20 69

原创 字符设备驱动基础

输入命令“cat /proc/devices”可以查看当前已经被使用掉的设备号。通过它选择没有被使用的主设备号。

2023-07-24 10:16:51 45

原创 cpu调度之EAS

printk 可以根据日志级别对消息进行分类,一共有 8 个消息级别,这 8 个消息级别定义在文件 include/linux/kern_levels.h 里面。默认消息级别为 4,4 的级别比 7 高,所示直接使用 printk 输出的信息是可以显示在控制台上的。CONSOLE_LOGLEVEL_DEFAULT 控制着哪些级别的消息可以显示在控制台上,此宏默认。一共定义了 8 个级别,其中 0 的优先级最高,7 的优先级最低。为 7,意味着只有优先级高于 7 的消息才能显示在控制台上。

2023-07-21 17:49:22 33

原创 系统烧写之MfgTool(正点原子笔记)

MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件,可以在 NXP 官网下载到。MfgTool2.exe 就是烧写软件,但是我们不会直接打开这个软件烧写,mfg_tools 不仅能烧写I.MX6U,而且也能给 I.MX7、I.MX6Q 等芯片烧写,所以在烧写之前必须要进行配置;其他的.vbs 烧写脚本用不到,因此可以删除掉,防止干扰我们的视线。因此只会用到 mfgtool2-yocto-mx-evk-emmc.vbs 这个烧写脚本。

2023-07-21 14:21:49 1353 1

原创 使用BusyBox编译根文件系统(zdyz)

如果 bootargs 设置 init=/linuxrc,那么 linuxrc 就是可以作为用户空间的 init 程序,所以用户态空间的 init 程序是 busybox 来生成的。如果使用“udhcpc”命令自动获取 IP 地址,“udhcpc”命令会修改 nameserver 的值,一般是将其设置为对应的网关地址。<root-dir>:根文件系统的存放路径,比如我的就是/home/zuozhongkai/linux/nfs/rootfs。设置为所处网络的网关地址,比如 192.168.1.1。

2023-07-21 09:02:24 184 1

原创 结构体定义一个大小为0的数组

最近修改驱动,发现结构体的最后一般都会定义一个大小为0的数组。

2023-07-18 09:41:18 37 1

原创 .config与defconfig之间的关系

文件就会被删除掉,因此我们所有配置都会前功尽弃。既然图形化界面配置后的配置项保存在。内核的时候就会使用新的配置文件。中,那么就简单粗暴,直接将。

2023-07-17 18:09:05 231 1

原创 cpu节点相关信息解释(正点原子笔记)

BogoMIPS是Linux系统中衡量处理器运行速度的一个“尺子”,处理器性能越强,主频越高,BogoMIPS值就越大。BogoMIPS只是粗略的计算CPU性能,并不十分准确。可以通过BogoMIPS值来大致的判断当前处理器的性能。目录:当前cpu工作频率,从CPU寄存器读取到的工作频率。:处理器所能运行的最高工作频率单位: KHz:处理器所能运行的最低工作频率单位: KHz:处理器切换频率所需要的时间单位:ns)。:处理器支持的主频率列表单位。

2023-07-17 17:12:01 872 1

原创 start_kernel 函数(正点原子笔记)

cpu_idle_loop,cpu_idle_loop 是个 while 循环,也就是 idle 进程代码。查找“/sbin/init”、“/etc/init”、“/bin/init”和“/bin/sh”,这四个相当于备用 init 程序,如果这四。第 940 行,ramdisk_execute_command 是一个全局的 char 指针变量,此变量值为“/init”,第 943 行,如果存在“/init”程序的话就通过函数 run_init_process 来运行此程序。根文件系统也是由命令行参。

2023-07-15 17:46:07 73 1

原创 bootz启动Linux内核过程

2.announce_and_cleanup定义在文件 arch/arm/lib/bootm.c 中,我们通常会看见下图输出,这是announce_and_cleanup函数。3.announce_and_cleanup函数结束,就会正式进入。kernel_entry 函数,至此,uboot使命就此结束。1.image全局变量。内核,此行将一去不复返,

2023-07-07 10:12:08 104 1

原创 kmemleak -检测内核中的内存泄漏工具

参考上面的文章。下面是自己的笔记。

2023-07-03 10:20:02 119 1

原创 反汇编u-boot与重定向(正点原子笔记)

0X9FF4B184+8+12=0X9FF4B198( 既 : 0X87804198+0X18747000) , 变 量 rel_a 的 地 址 就 为0X8785DA50+0X18747000=0X9FFA4A50。r3=0X8780418C+12=0X87804198,第 7 行就是 0X87804198 这个地址,0X87804198 处的值为。0X8785DA50。②、函数 rel_test 要想访问变量 rel_a,首先访问末尾的 0X87804198 来获取变量 rel_a 的地。

2023-06-30 08:40:24 254

原创 U-Boot启动流程(正点原子笔记)

第 46 行,如果 r1 和 0X1A 不相等,也就是 CPU 不处于 Hyp 模式的话就将 r0 寄存器的。第 48 行,r0 寄存器的值再与 0xC0 进行或运算,那么 r0 寄存器此时的值就是 0xD3,cpsr。第 44 行,将寄存器 r0 中的值与 0X1F 进行与运算,结果保存到 r1 寄存器中,目的就是提。第 47 行,如果处理器不处于 Hyp 模式的话就将 r0 的寄存器的值与 0x13 进行或运算,0x13=0b10011,也就是设置处理器进入 SVC 模式。处于 Hyp 模式。

2023-06-29 20:10:00 66 1

原创 如何确定uboot地址是0x87800000?

从图 32.1.4 的 932 行可以看到__image_copy_start 为 0X87800000,而.text 的起始地址也是。从图 32.1.2 中的代码可以看出,_start 后面就是中断向量表,从图中的“.section ".vectors",在 u-boot.lds 中有一些跟地址有关的“变量”需要我们注意一下,后面分析 u-boot 源码的。上表中的“变量”值可以在 u-boot.map 文件中查找,除了__image_copy_start。时候会用到,这些变量要最终编译完成才能确定的!

2023-06-27 10:52:41 266 1

原创 安卓init启动流程及rc

最近写一个native services,顺便学习了一下启动流程。看见了这个帖子说的很到位,赶紧分享一下。

2023-06-16 20:10:49 278 1

原创 浅析uboot Makefile(正点原子笔记)

(MAKE)就是调用“make”命令,-C 指定子目录。有时候我们需要向子 make 传递变量,export/unexport有两个特殊的变量:“SHELL”和“MAKEFLAGS”,这两个变量除非使用“unexport”声明, 否则的话在整个make的执行过程中,它们的值始终自动的传递给子make上述代码使用“+=”来给变量 MAKEFLAGS 追加了一些值,“ -rR”表示禁止使用内置的隐 含规则和变量定义,“--include-dir”指明搜索路径,”$(CURDIR)”表示当前目录。

2023-06-16 12:00:37 160 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除