-
liunx printk 函数消息是如何记录的
所属栏目:[Linux] 日期:2020-12-13 热度:132
printk 函数将消息写入一个?? LOG_BUF_LEN 字节长的环形缓存,长度值从 4 KB 到 1 MB,由配置内核时选择. 这个函数接着唤醒任何在等待消息的进程,就是说,任何在系统 调用中睡眠或者在读取 /proc/kmsg 的进程. 这 2 个日志引擎的接口几乎是等同的,但 是注意,从[详细]
-
Linux进程数,句柄数,文件描述符是什么
所属栏目:[Linux] 日期:2020-12-13 热度:172
linux文件句柄数 linux文件句柄数 1、问题阐述: too many open files:顾名思义即打开过多文件数。 不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句[详细]
-
linux kgdb 补丁
所属栏目:[Linux] 日期:2020-12-13 热度:124
目前为止我们看到的 2 个交互式调试方法( 使用 gdb 于 /proc/kcore 和 kdb) 都缺乏 应用程序开发者已经熟悉的那种环境. 如果有一个真正的内核调试器支持改变变量,断点 等特色,不是很好? ? 确实,有这样一个解决方案 2 个分开的补丁在流通中,它允许 gdb,具 备[详细]
-
linux 在 scull 中使用旗标
所属栏目:[Linux] 日期:2020-12-13 热度:152
旗标机制给予 scull 一个工具,可以在存取 scull_dev 数据结构时用来避免竞争情况. 但是正确使用这个工具是我们的责任. 正确使用加锁原语的关键是严密地指定要保护哪个 资源并且确认每个对这些资源的存取都使用了正确的加锁方法. 在我们的例子驱动中,感 兴趣[详细]
-
linux 读者/写者旗标
所属栏目:[Linux] 日期:2020-12-13 热度:153
旗标为所有调用者进行互斥,不管每个线程可能想做什么. 然而,很多任务分为 2 种清 楚的类型: 只需要读取被保护的数据结构的类型,和必须做改变的类型. 允许多个并发读 者常常是可能的,只要没有人试图做任何改变. 这样做能够显著提高性能; 只读的任务可 以并行[详细]
-
Linux添加硬盘创建新的逻辑卷方式
所属栏目:[Linux] 日期:2020-12-13 热度:91
有同仁看了上文《Linux添加硬盘扩充已有分区存储空间方式》一文后,提出疑问,现在很多云服务器本来没有逻辑卷,添加数据盘后需要自行添加,如何处理? 此文将以某云服务器为例,详细进行解说。 总体步骤 磁盘初始化分区 创建物理卷 创建卷组 创建逻辑卷 通[详细]
-
linux seq_file 接口
所属栏目:[Linux] 日期:2020-12-13 热度:62
如我们上面提到的,在 /proc 下的大文件的实现有点麻烦. 一直以来,/proc 方法因为 当输出数量变大时的错误实现变得声名狼藉. 作为一种清理 /proc 代码以及使内核开发 者活得轻松些的方法,添加了 seq_file 接口. 这个接口提供了简单的一套函数来实现大 内核虚[详细]
-
linux oops 消息
所属栏目:[Linux] 日期:2020-12-13 热度:137
大部分 bug 以解引用 NULL 指针或者使用其他不正确指针值来表现自己的. 此类 bug 通 常的输出是一个 oops 消息. ? 处理器使用的任何地址几乎都是一个虚拟地址,通过一个复杂的页表结构映射为物理地址 (例外是内存管理子系统自己使用的物理地址). 当解引用一个[详细]
-
linux scull 中的缺陷
所属栏目:[Linux] 日期:2020-12-13 热度:114
让我们快速看一段 scull 内存管理代码. 在写逻辑的深处,scull 必须决定它请求的内 存是否已经分配. 处理这个任务的代码是: ? if (!dptr-data[s_pos]) { dptr-data[s_pos] = kmalloc(quantum,GFP_KERNEL); if (!dptr-data[s_pos]) goto out; } ? 假设有 2 个[详细]
-
linux 使用 gdb
所属栏目:[Linux] 日期:2020-12-13 热度:119
gdb 对于看系统内部是非常有用. 在这个级别精通调试器的使用要求对 gdb 命令有信心,需要理解目标平台的汇编代码,以及对应源码和优化的汇编码的能力. ? 调试器必须把内核作为一个应用程序来调用. 除了指定内核映象的文件名之外,你需要在 命令行提供一个核心文[详细]
-
Linux 旗标实现
所属栏目:[Linux] 日期:2020-12-13 热度:107
Linux 内核提供了一个遵守上面语义的旗标实现,尽管术语有些不同. 为使用旗标,内核 代码必须包含 asm/semaphore.h. 相关的类型是 struct semaphore; 实际旗标可以用 几种方法来声明和初始化. 一种是直接创建一个旗标,接着使用 sema_init 来设定它: ? void sem[详细]
-
linux kdb 内核调试器
所属栏目:[Linux] 日期:2020-12-13 热度:159
许多读者可能奇怪为什么内核没有建立更多高级的调试特性在里面.答案,非常简单,是 Linus 不相信交互式的调试器. 他担心它们会导致不好的修改,这些修改给问题打了补丁 而不是找到问题的真正原因. 因此,没有内嵌的调试器. ? 其他内核开发者,但是,见到了交互式调[详细]
-
linux 系统挂起
所属栏目:[Linux] 日期:2020-12-13 热度:101
尽管内核代码的大部分 bug 以 oops 消息结束,有时候它们可能完全挂起系统. 如果系 统挂起,没有消息打印. 例如,如果代码进入一个无限循环,内核停止调度,[15]15?并且系 统不会响应任何动作,包括魔术 Ctrl-Alt-Del 组合键. 你有 2 个选择来处理系统挂起- - 或者[详细]
-
linux 使用 jiffies 计数器
所属栏目:[Linux] 日期:2020-12-13 热度:185
这个计数器和来读取它的实用函数位于 linux/jiffies.h,尽管你会常常只是包含 linux/sched.h,它会自动地将 jiffies.h 拉进来. 不用说,jiffies 和 jiffies_64 必须当作只读的. ? 无论何时你的代码需要记住当前的 jiffies 值,可以简单地存取这个 unsigned long[详细]
-
linux 定时器 API
所属栏目:[Linux] 日期:2020-12-13 热度:98
内核提供给驱动许多函数来声明,注册,以及去除内核定时器. 下列的引用展示了基本的 代码块: ? #include linux/timer.h struct timer_list { /* ... */ unsigned long expires; void (*function)(unsigned long); unsigned long data; }; void init_timer(stru[详细]
-
linux 延后执行
所属栏目:[Linux] 日期:2020-12-13 热度:65
设备驱动常常需要延后一段时间执行一个特定片段的代码,常常允许硬件完成某个任务. 在这一节我们涉及许多不同的技术来获得延后. 每种情况的环境决定了使用哪种技术最好; 我们全都仔细检查它们,并且指出每一个的长处和缺点. ? 一件要考虑的重要的事情是你需要[详细]
-
linux ubuntu centos ssh 登录 root 密码错误 Permission denied
所属栏目:[Linux] 日期:2020-12-13 热度:174
我在Ubuntu上默认开启ssh服务 root登录失败 报错Permission denied,please try again ? 通常是由于/etc/ssh/sshd_config的PasswordAuthentication或PermitRootLogin参数的配置引起的 ? 将PasswordAuthentication设为yes 将PermitRootLogin前面的#号去掉 将Pe[详细]
-
linux 处理器特定的寄存器
所属栏目:[Linux] 日期:2020-12-13 热度:69
如果你需要测量非常短时间间隔,或者你需要非常高精度,你可以借助平台依赖的资源,一个要精度不要移植性的选择. ? 在现代处理器中,对于经验性能数字的迫切需求被大部分 CPU 设计中内在的指令定时不 确定性所阻碍,这是由于缓存内存,指令调度,以及分支预测引起.[详细]
-
linux 短延时
所属栏目:[Linux] 日期:2020-12-13 热度:80
当一个设备驱动需要处理它的硬件的反应时间,涉及到的延时常常是最多几个毫秒. 在这 个情况下,依靠时钟嘀哒显然不对路. ? The kernel functions ndelay,udelay,and mdelay serve well for short delays,delaying execution for the specified number of nanos[详细]
-
linux 内核定时器的实现
所属栏目:[Linux] 日期:2020-12-13 热度:57
为了使用它们,尽管你不会需要知道内核定时器如何实现,这个实现是有趣的,并且值得 看一下它们的内部. ? 定时器的实现被设计来符合下列要求和假设: ? 定时器管理必须尽可能简化. 设计应当随着激活的定时器数目上升而很好地适应. 大部分定时器在几秒或最多几分[详细]
-
linux Tasklets 机制
所属栏目:[Linux] 日期:2020-12-13 热度:160
tasklet 类似内核定时器在某些方面. 它们一直在中断时间运行,它们一直运行在调度它 们的同一个 CPU 上,并且它们接收一个 unsigned long 参数. 不象内核定时器,但是,你无法请求在一个指定的时间执行函数. 通过调度一个 tasklet,你简单地请求它在以后 的一个由[详细]
-
linux 基于 jiffy 的超时
所属栏目:[Linux] 日期:2020-12-13 热度:160
到目前为止所展示的次优化的延时循环通过查看 jiffy 计数器而不告诉任何人来工作. 但是最好的实现一个延时的方法,如你可能猜想的,常常是请求内核为你做. 有 2 种方 法来建立一个基于 jiffy 的超时,依赖于是否你的驱动在等待其他的事件. ? 如果你的驱动使用一[详细]
-
linux单 open 设备
所属栏目:[Linux] 日期:2020-12-13 热度:64
提供存取控制的强力方式是只允许一个设备一次被一个进程打开(单次打开). 这个技术最 好是避免因为它限制了用户的灵活性. 一个用户可能想运行不同的进程在一个设备上,一 个读状态信息而另一个写数据. 在某些情况下,用户通过一个外壳脚本运行几个简单的程 序可[详细]
-
linux磁盘管理
所属栏目:[Linux] 日期:2020-12-13 热度:161
1.MBR:共512字节 446字节bootloader主引导程序 64字节磁盘分区表 2字节魔数 2.主分区和逻辑分区 主分区最多是4个 扩展分区最多一个,另外扩展分区不能被直接使用而是制作成逻辑分区使用 逻辑分区序列号是从5开始的 逻辑分区可以有很多个,取决于扩展分区大小[详细]
-
linux 内核定时器
所属栏目:[Linux] 日期:2020-12-13 热度:106
无论何时你需要调度一个动作以后发生,而不阻塞当前进程直到到时,内核定时器是给你 的工具. 这些定时器用来调度一个函数在将来一个特定的时间执行,基于时钟嘀哒,并且 可用作各类任务; 例如,当硬件无法发出中断时,查询一个设备通过在定期的间隔内检查 它的状态[详细]