kernel
DemonHunter211
这个作者很懒,什么都没留下…
展开
-
/sys目录下各个子目录的具体说明
/sys下的子目录内容/sys/devices该目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备。一般来说,所有的物理设备都按其在总线上的拓扑结构来显示,但有两个例外,即platform devices和system devices。platform devices一般是挂在芯片内部的高速或者低速总线上的各种控制器和外设,它们能被CPU直接寻址;system devices...原创 2018-07-14 17:00:22 · 1664 阅读 · 0 评论 -
Linux内核模块简介
一. 摘要这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程。主要从模块开发中的常用指令、内核模块程序的结构、模块使用计数以及模块的编译等角度对内核模块进行介绍。在Linux系统开发过程中,以模块的形式开发其重要性不言自明,而在嵌入式设备驱动开发中将驱动程序以模块的形式发布,更是极大地提高了设备使用的灵活性——用户只需要拿到相关驱动模块,再插入到用户的内核中,即可灵活地原创 2017-09-15 09:05:32 · 302 阅读 · 0 评论 -
CPU中的主要寄存器
在CPU中至少要有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)。这些寄存器用来暂存一个计算机字,其数目可以根据需要进行扩充。1. 数据寄存器数据寄存器(Data Register,DR)又称数据缓冲寄存器,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之原创 2017-09-07 09:11:49 · 29235 阅读 · 1 评论 -
ati-driver在2.16.18-gentoo-r2内核编译有问题及解决方法!!!
今天把我的gentoo同步了一下,发现内核从2.16.17-gentoo-r8升级到了2.16.18-gentoo-r2,就直接make oldconfig,升级了内核,紧接着执行module-rebuild rebuild命令来重新编译依赖于内核的相关模块。发现在编译ati-driver的时候出现了错误,有两个常量声明无法找到:代码: CC [M] /var/tmp/portag原创 2017-09-14 09:10:35 · 493 阅读 · 0 评论 -
关于EXPORT_SYMBOL的作用浅析
在查看内核驱动代码的时候会经常看到在一些函数后面总会跟EXPORT_SYMBOL()这样的宏定义,通过网上查阅,它的作用大致总结如下:1、定义说明 把内核函数的符号导出,也可以理解成将函数名作为符号导出;符号的意思就是函数的入口地址,或者说是把这些符号和对应的地址保存起来的,在内核运行的过程中,可以找到这些符号对应的地址的。2、相关处理 (1)、对编原创 2017-09-14 09:10:18 · 4558 阅读 · 0 评论 -
Linux内核模块开发实例学习
注:以下程序只是在我机器上测试通过,但代码不一定合理或高效,只是想了解一下内核模块的开发流程,以及工作流程例子来源于网络,在此表示感谢[cpp] view plain copy[root@localhost module]# cat /proc/version Linux version 2.6.18-194.el5xen (mockbu原创 2017-09-14 09:09:12 · 387 阅读 · 0 评论 -
调用linux 内核模块测试
[root@openstack01 TestModule2]# uname -aLinux openstack01 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/LinuxMakefile:obj-m:=TestModule.oVERSION_NU原创 2017-09-14 09:08:40 · 613 阅读 · 0 评论 -
手动创建设备 mknod命令
insmod 加载驱动模块也可以使用modprobe 加载驱动模块例如:驱动模块为leds.ko,insmod leds.komodprobe leds就可以了这里两条命令的区别,还有区别就是modprobe会检测与该驱动相关的模块,并自动加载相应需要的模块。 加载后,就需要创建设备了,可以使用的命令是mknod,命令的格式是:mknod 设备名 设原创 2017-09-14 09:08:26 · 1363 阅读 · 0 评论 -
Linux:内核模块实现替换系统调用的简单例子
原文链接:http://blog.csdn.net/ddk3001/article/details/51485135编写Linux内核模块,可以实现替换系统调用功能。 本文提供一个替换open系统调用的样例代码,功能和说明见代码。参考代码:https://github.com/ricardoteixas/hook 在 https://github.com 中搜索 hook、原创 2017-09-14 09:08:01 · 1212 阅读 · 0 评论 -
Re: Removing of UTS_RELEASE in include/linux/version.h
From: Sam Ravnborg Date: Thu Aug 17 2006 - 00:50:14 ESTNext message: Eric W. Biederman: "Re: [RFC] ps command race fix"Previous message: Daniel Phillips: "Re: [RFC][PATCH 0/9] Network receive原创 2017-09-14 09:08:00 · 471 阅读 · 0 评论 -
linux设备驱动第一篇:设备驱动程序简介
首先,我们知道驱动是内核的一部分,那么驱动在内核中到底扮演了什么角色呢?设备驱动程序在内核中的角色:他们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。(说白了,驱动程序除了对外提供特定的接口外,任何实现细节对应用程序都是不可见的。)用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。驱动程序的任务是把这些标准化调用映原创 2017-09-15 09:06:10 · 306 阅读 · 0 评论 -
向内核添加自己的模块
向内核添加自己的模块http://www.cnblogs.com/timkyle/archive/2012/04/13/2444975.html说明:我开发板的内核启动参数环境变量bootargs内容为root=/dev/nfs nfsroot=192.168.1.10:/nfsroot ip=192.168.1.20 console=ttySAC0,115原创 2017-09-15 09:06:30 · 614 阅读 · 0 评论 -
linux设备驱动第三篇:写一个简单的字符设备驱动
在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分配的一些内存。下面就开始学习如何写一个简单的字符设备驱动。首先我们来分解一下字符设备驱动都有那些结构或者方法组成,也就是说实现一个可以使用的字符设备驱动我们必须做些什么工作。1、主设备号和次设备号对于原创 2017-09-15 09:06:39 · 345 阅读 · 0 评论 -
谈谈 Linux 内核驱动的编码风格
最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多。当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代码的时候在很多细节上会照顾不周。不过, 在不遵守规则的程序员队伍里,我并不是孤独的。如果去看drivers/staging下的代码,就会发现很多驱动程序都没有严格遵守内核的coding style,而原创 2017-10-18 11:38:01 · 362 阅读 · 0 评论 -
Linux内核模块间函数调用正确方法
模块之间发生调用关系是常有的事情,下面以两个模块A、B,B使用A模块提供的函数为例,讲解正确使用的方法。模块A中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL将要提供给B模块的函数导出;模块B中用extern 声明需要用到的A模块提供的函数。代码如下:模块A的代码 – A_func.c#include #include #include原创 2017-09-13 09:07:33 · 1132 阅读 · 0 评论 -
nf_hook_ops 钩子的注册
nf_hook_ops 钩子的注册在filter表的初始化函数static int __init init(void)中除了有一个nf_register_hook函数注册一个tables外,还由nf_register_hook函数注册了3个hook 1 nf_hook_ops数据结构 netfilter.hstruct nf_hook_ops{原创 2017-09-13 09:07:01 · 875 阅读 · 0 评论 -
nf_register_hooks NF_HOOK
如果我们想加入自己的代码,便要用nf_register_hook函数,其函数原型为:int nf_register_hook(struct nf_hook_ops *reg)struct nf_hook_ops://结构struct nf_hook_ops{struct list_head list;/* User fills in from here down. */原创 2017-09-13 09:06:28 · 6800 阅读 · 1 评论 -
嵌入式Linux菜鸟学习之路
1.设备驱动的作用计算机系统由硬件、软件组成,而对于实际开发来说,硬、软件间耦合性应尽量低,即应用开发工程师不需关心 硬件,而硬件开发工程师无暇顾及软件。为了降低硬、软耦合性,产生了设备驱动工程师。2.操作系统驱动设计架构在无操作系统时,硬件工程师可以自定义API供应用开发工程师使用;而使用操作系统后,需按操作系统定义的架构设计驱动,如此才能良好的嵌入内核中。对图1原创 2017-09-13 09:05:13 · 653 阅读 · 0 评论 -
【整理】uclibc,eglibc,glibc之间的区别和联系
【glibc,uclibc,eglibc的简介】1.Glibcglibc = GNU C Library是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比原创 2017-09-12 09:12:16 · 379 阅读 · 0 评论 -
嵌入式linux内核组成
Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示。 图1 Linux内核的组成部分与关系 1.进程调度 进程调度控制系统中的多个进程对CPU的访问,使得多个进程能在CPU中“微观串行,宏观并行”地执行。进程调度处于系统的中心位置,内核中其他的子系统都原创 2017-09-12 09:10:08 · 881 阅读 · 0 评论 -
MCU
微控制单元(Microcontroller Unit;MCU) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算原创 2017-09-11 09:26:53 · 932 阅读 · 0 评论 -
Linux的任督二脉:进程调度和内存管理
《穆赫兰道》与《内陆帝国》我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU、内存资源等的真正分布,具体的工作机制,这使得他们对很多问题的分析都摸不到方向。比如进程的调度延时是多少?Linux能否硬实时?多核下多线程如何执行?系统的内存究竟耗到哪里去了?我写的应用程序究竟耗了多少内原创 2017-08-31 09:12:36 · 535 阅读 · 0 评论 -
linux lsmod命令详解
lsmod (list modules)语 法:lsmod功 能:lsmod 命令:是一个小程序,用来显示文件、proc/modules的信息,也就是显示当前内核模块装载的模块。补充说明:执行lsmod指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编原创 2017-08-30 10:24:54 · 2752 阅读 · 0 评论 -
汇编文件 .s 和 .S 区别
.s 汇编语言源程序; 操作: 汇编.S汇编语言源程序; 操作: 预处理 + 汇编-------------------------------------------------------------------------------------------------------------------------------------------------原创 2017-08-24 10:50:28 · 823 阅读 · 0 评论 -
外企linux嵌入式笔试题
一、基础题1.解释命令ls -a | more具体含义.2.LINUX中的管道指什么重定向又指什么3.GCC -g -o test.elf test.c的具体含义.4.浅述GCC编译器在编译时都有哪几个过程5,在题3的基础上编写一MAKEFILE文件,要求能自动完成编译和清除功能6.说明uclinux 和linux的区别7解释下面一组GDB命令的原创 2017-08-28 09:37:36 · 700 阅读 · 0 评论 -
lsmod命令
lsmod命令用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。 语法 lsmod 实例 [root@LinServ-1 ~]# lsmod Module Size Used by ipv6 272801 1原创 2017-08-28 09:37:29 · 698 阅读 · 0 评论 -
linux内核分析笔记----调度
调度?咋这熟悉,我们是不是常在哪里听到。没错,是的,调度我们时常听过,比如交通管制调度啦等。这不,夏天这热, 标语贴的好:相应国电电力调度,做文明市民,好别扭啊!不管了。你要是还是不懂,再啰嗦讲个事,过年回家,和漂亮的GF回家,为了张普通的硬座票还要排老久对,甚至还可能被坑拿到黄牛票,这时你嘴里咧咧的啥:XX,啥火车站,做的啥春运调度啊!唉,这次你说到点上了。 总结一下:调度就原创 2017-08-14 09:09:35 · 371 阅读 · 0 评论 -
linux内核中断实现机制
一、什么是中断中断分两种:1)中断,又叫外部中断或异步中断,它的产生是由于外设向处理器发出中断请求。其中外部中断也有两种,这是由配置寄存器设定的:普通中断请求(IRQ)和快速中断请求(FIQ)。一般地,linux下很少使用快速中断请求。2)异常,又叫内部中断或同步中断,它的产生是由于处理器执行指令出错。在以下的内容我是要介绍由于外部设备产生的中断。原创 2017-07-28 09:17:03 · 318 阅读 · 0 评论 -
深入浅出linux之内核数据结构
内核使用的数据结构有双向链表,单向链表和hash链表。另外,基树和红黑树也是内核使用的数据结构。实际上,这也是程序代码中通常使用的数据结构,一些偏僻难的数据结构并不常见。 1. container container是linux很重要的一个概念。有了container方法,才能实现对对象的封装。 分析一下container方法。=====原创 2017-07-28 09:15:20 · 1159 阅读 · 1 评论 -
DPDK架构与特点
当年在某公司实习的时候,当时老大给了我一份DPDK的文档,说是将来很有用,熟悉DPDK对能力提高也有帮助,就试着翻译了《Intel DPDK Getting Started Guide》和半个《Intel DPDK Programmers Guide》,后来忙着论文就没再搞了。现在,发现pf_ring的统计虚高了,只好重新拥抱DPDK了。DPDK的代码量还是很庞大的,分析代原创 2017-08-12 19:09:30 · 2108 阅读 · 0 评论 -
linux内核分析笔记----页高速缓存和页回写
说句真的,也缓存我听的都少,虽然看了很多。页高速缓存是linux内核实现的一种主要磁盘缓存,它主要用来减少对磁盘的IO操作,具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。为什么要这么做呢?一,速度;二临时局部原理。有关这两个概念,相信熟悉操作系统的我们不会太陌生。页高速缓存是由RAM中的物理页组成的,缓存中的每一页都对应着磁盘中的多个块。每当内核开始执行一个页原创 2017-08-04 09:14:19 · 328 阅读 · 0 评论 -
Unix编程学习笔记----对系统调用的完全理解
系统调用的具体流程: 参考《linux下系统调用原理解析及增加系统调用的方法》 我们首先看一下,unistd.h 所处的路径: 我们看一下unistd.h的文件内容。 现在我们就分析一下,这个unistd.h头文件的内容: 在文件中形如: #define --NR_sysca原创 2017-08-03 09:39:15 · 683 阅读 · 0 评论 -
Linux文件系统的实现
Linux文件系统的实现作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Linux文件管理从用户的层面介绍了Linux管理文件的方式。Linux有一个树状结构来组织文件。树的顶端为根目录(/),节点为目录,而末端的叶子为包含数据的文件。当我们给出一个文件的完整路径时,我们从根目录出发,经过沿途各个目录原创 2017-08-03 09:37:58 · 346 阅读 · 0 评论 -
CentOS 7 开机加载内核模块
以ceph模块为例:#cd /etc/sysconfig/modules/#vim ceph.modules在文件中添加如下内容 #!/bin/sh /sbin/modinfo -F filename ceph > /dev/null 2>&1 if [ $? -eq 0 ]; then /sbin/modprobe ceph fi#chmod 755 ce原创 2017-08-10 09:27:50 · 1015 阅读 · 0 评论 -
linux下TCP/IP及内核参数优化调优(转)
Linux下TCP/IP及内核参数优化有多种方式,参数配置得当可以大大提高系统的性能,也可以根据特定场景进行专门的优化,如TIME_WAIT过高,DDOS攻击等等。如下配置是写在sysctl.conf中,可使用sysctl -p生效,文中附带了一些默认值和中文解释(从网上收集和翻译而来),确有些辛苦,转载请保留链接,谢谢~。相关参数仅供参考,具体数值还需要根据机器性能,应用场景等实际情况来原创 2017-08-02 09:16:42 · 398 阅读 · 0 评论 -
Linux内核高性能优化【生产环境实例】
话不多说,直接上线上服务器的sysctl.conf文件,当然,这是前辈大牛的功劳:#---内核优化开始--------# 内核panic时,1秒后自动重启kernel.panic = 1# 允许更多的PIDs (减少滚动翻转问题); may break some programs 32768kernel.pid_max =原创 2017-08-02 09:16:31 · 574 阅读 · 0 评论 -
一个Linux内核利用init_task进行进程管理的简单例子
#include #include #include int init_module( void ){ /* Set up the anchor point */ struct task_struct *task = &init_task; /* Walk through the task list, until we hit the init_task原创 2017-08-14 09:32:31 · 602 阅读 · 0 评论 -
Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度
日期内核版本架构作者GitHubCSDN2016-07-01Linux-4.6X86 & armgatiemeLinuxDeviceDriversLinux进程管理与调度前面我们了解了linux进程调度器的设计思路和注意框架周期调度器scheduler_tick通过l原创 2017-07-29 08:50:28 · 632 阅读 · 0 评论 -
linux 内核信号量 用户态信号量 详解
Linux 内核中的信号量使用和用户态的信号量使用有所不同,1、内核信号量,由内核控制路径使用。2、用户态信号量分为两种,一种为POSIX,另一种为 SYSTEM V内核中信号量的构成以及使用:内核信号量的构成内核信号量类似于自旋锁,因为当锁关闭着时,它不允许内核控制路径继续进行。然而,当内核控制路径试图获取内核信号量锁保护的忙资源时,相应的进程就被挂起。只有在资源被释放时,原创 2017-07-29 08:51:00 · 1447 阅读 · 0 评论 -
模块的许可证声明 - MODULE_LICENSE(“GPL”)
模块的许可证声明从2.4.10版本内核开始,模块必须通过MODULE_LICENSE宏声明此模块的许可证,否则在加载此模块时,会收到内核被污染 “kernel tainted” 的警告。从linux/module.h文件中可以看到,被内核接受的有意义的许可证有 “GPL”,“GPL v2”,“GPL and additional rights”,“Dual BSD/GPL”,“Dual M原创 2017-08-28 09:37:20 · 16797 阅读 · 0 评论