【Linux内核】教程文章相关的互联网学习教程文章

在Linux内核中根据函数指针输出函数名称【代码】

在使用Linux内核提供的打印函数时,使用“%p”可以实现很多额外的效果,对于我们调试内核代码也有一定帮助。比如当我们看到函数指针变量,想获取这个函数指针对应的是哪个函数,可以使用“%pF”,示例: 1 #include <linux/init.h>2 #include <linux/module.h>3 4staticint test_function(void)5{6 printk("%s enter.\n", __func__);7 8return0;9} 1011staticint __init printk_demo_init(void) 12{ 13int (*func)(void); ...

Linux内核同步 - memory barrier【图】

一、前言我记得以前上学的时候大家经常说的一个词汇叫做所见即所得,有些编程工具是所见即所得的,给程序员带来极大的方便。对于一个c程序员,我们的编写的代码能所见即所得吗?我们看到的c程序的逻辑是否就是最后CPU运行的结果呢?很遗憾,不是,我们的“所见”和最后的执行结果隔着:1、编译器2、CPU取指执行编译器将符合人类思考的逻辑(c代码)翻译成了符合CPU运算规则的汇编指令,编译器了解底层CPU的思维模式,因此,它可以在...

Linux内核 -- 内核源码结构【图】

Linux 内核源代码的目录结构Linux 内核源代码包含如下目● arch:包含和硬件体系结构相关的代码,每个架构的CPU都对应一个目录,如i386、arm、    arm64、powerpc、mips 等。Linux 内核目前已经支持30 种左右的体系结构。在arch    目录下,存放的是各个平台以及各个平台的芯片对Linux 内核进程调度、内存管理、    中断等的支持,以及每个具体的SoC 和电路板的板级支持代码。● block:块设备的通用函数,驱动程序I/O...

《linux内核设计与实现》读书笔记第四章【图】

第4章 进程调度4.1 多任务多任务系统可以划分为:非抢占式多任务和抢占式多任务。 Linux 提供了抢占式的多任务模式。在抢占式多任务模式下,由调度程序来决定什么时候停止一个进程的运行。这个强制的挂起动作就叫做抢占。在非抢占式多任务模式下,除非进程自己主动停止运行,否则它会一直执行。进程主动挂起自己的操作称为让步 。4.2 Linux 的进程调度1、O(1)调度器调度算法对于调度那些响应时间敏感的程序有先天不足。响应时间...

在linux内核文件中添加自己的驱动,添加自己的linux驱动,编译自己的linux驱动程序方法和例子图文【代码】【图】

此文章为done原创,转载请写明出处,尊重原创。写这个文章,我参考了网上的一些博客:http://bbs.chinaunix.net/thread-3634524-1-1.htmlhttp://www.bkjia.com/gjrj/800182.html也参考了参考了 《linux驱动开发详解》3.4章节,实现建立自己驱动目录。文章中的驱动范例是:linux设备驱动开发详解第二版 的 global mem tow,宋宝华主编的书本光盘源码在我们学习了linux的驱动之后,我们都想编写一个linux驱动验证一下自己是否写的对,...

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)

linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86可以有4种模式RING0~RING3 RING0特权模式给LINUX内核空间RING3给用户空间linux内核是如何组成的?答:linux内核由SCI(System Call Interface)系统调用接口、PM(Process Management)进程管理、MM(Memory Management)内存管理、Arch、...

Linux内核调试方法总结之ftrace【图】

ftrace【用途】ftrace包含一系列跟踪器,用于不同的场合,比如跟踪内核函数调用(function tracer)、跟踪上下文切换(sched_switch tracer)、查看中断被关闭的时长(irqsoff tracer)、跟踪内核中的延迟以及性能问题等。Ftrace是内建于Linux的内核跟踪工具,依赖于内核配置宏(Kernel Hacking->Tracers)和debugfs。【原理】 ftrace本质上是一种静态代码插装技术,不需要支持某种变成接口让用户自定义trace行为,...

Linux内核-链表【代码】

linux内核链表的定义(定义了双向链表,不含数据域)定义在 /linux-source-3.13.0/include/linux/types.h 头文件中.1struct list_head { 2struct list_head *next, *prev; 3 };我们可以利用这个数据结构定义含有数据域的链表,如:1struct my_list 2{ 3void * mydata; //void * 可以指向任何类型的数据4struct list_head list; //隐藏了链表指针5 } 链表的声明和初始化宏(list.h)定义在 /linux-source-3.13.0/include/lin...

Linux内核中SPI/I2c子系统剖析【图】

Linux内核中,SPI和I2C两个子系统的软件架构是一致的,且Linux内核的驱动模型都以bus,driver,device三种抽象对象为基本元素构建起来。下文的分析将主要用这三种抽象对象的创建过程及其相互调用关系和作用来进行说明。1. SPI各对象的初始流程1.1 创建spi_bus_type总线postcore_initcall(抽象层spi.c中)bus_register(&spi_bus_type);class_register(&spi_master_class);1.2 把板级信息注册到全局链表中embedsky_evm_dev_cfg(arc...

Linux内核设计的艺术-关于缓冲块的进程等待队列

进程A是一个读盘进程,目的是将hello.txt文件中的100字节读入buffer[100]。 代码如下:void FunA(); void main() {...FunA();... }void FunA() {char buffer[100];int i,j;int fd = open("/mnt/user/user1/user2/hello.txt",O_RDWR,0644);read(fd,buffer,sizeof(buffer));close(fd);for(i=0;i<1000000;i++){for(j=0;i<100000;j++){;}} } 进程B也是一个读盘进程,目的是将hello.txt文件中的200字节读入buffer[200]。 void ...

浅谈 Linux 内核开发之网络设备驱动【代码】

网络设备介绍网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口。众所周知,在 OSI(Open Systems Interconnection,开放网际互连)中,网络被划分为七个层次,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。我们所讲的网络设备也包括两个层次,一层叫做 MAC(Media Access Control)层,对应于 OSI 的数据链路层;另一层叫做 PHY(Physical ...

Oracle在Linux内核参数的修改

实例:kernel.core_uses_pid = 1kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 9000 65000net.core.rmem_default = 4194304net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 262144ore_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0 服...

linux 内核升级

LINUX 内核升级linux 内核官网https://www.kernel.org/ POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 ------->加载选定的Kernel,initrd(内存模拟的磁盘设备需要缓存),initramfs(缓存) ---->获取到根文件系统并挂载,运行init  设置默认运行级别  定义运行的系统初始化脚本,  运行制定下的S开头的服务,关闭K开头的服务  CtrlAltDel    启动字符终...

Linux内核设计基础(九)之进程管理和调度【图】

在Linux中进程用结构体task_struct来管理一个进程所需的所有信息(所以一般较大,在32位机上,大约有1.7KB)。为了提高效率,Linux使用了一些卓越的技术。通过slab分配task_struct结构Linux创建进程迅速,正是因为slab分配器预先分配和重复使用task_struct,这样就避免了动态分配和释放所带来的资源消耗(毕竟一个task_struct较大,而且内核中进程的创建和消除很频繁)。将task_struct放置在内核栈的尾端这样做是为了让那些像x86那...

linux内核参数sem的说明

sem:是semaphores的缩写,该参数表示设置的信号量。它包含四个值:semmsl、semmns、semopm、semmni。常规设置 kernel.sem = 250 32000 100 128semmns:信号灯的最大数量,跟ORACLE的PROCESS数有关。SEMMSL * SEMMNIsemopm:系统调用允许的信号量最大个数。至少100;或者等于SEMMSLsemmni:系统信号量set最大个数。最少128semmsl:每个信号灯集合中最多的信号灯数目。最小250;对于processes参数设置较大的系统建议设置为pro...