首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    Windows内核开发-3-内核编程基础

    Windows内核开发-3-内核编程基础 这里会深入讲解kernel内核的API、结构体、和一些定义。考察代码在内核驱动中运行的机制。最后把所有知识合在一起写一个有用的驱动。 本章学习要点: 1:通用内核编程指南 2:debug和release版本的区别 3内核API 4:函数和错误代码 5:字符串 6:动态内存分配 7:内核驱动对象 8:设备对象 1 内核编程注意事项 B:只把指针作为全局变量,利用指针来动态创建 3:C++中的异常长处理不支持(try,catch,throw),因为Kernel只支持SEH 4:不支持C++标准库 驱动用纯C来写没有任何问题,但是也可以采用 3 The Kernel API 内核API 写的内核驱动程序可以使用已经存在的一些内核组件中提供的API,这个函数被称为内核API。 IRP_MJ_READ(3) 读操作,通常被ReadFile、ZwReadFile和其类似的读取API调用 IRP_MJ_WRITE(4) 写操作,通常被WriteFile、ZwWriteFile和其类似的

    2.2K30编辑于 2022-09-06
  • 来自专栏Linux驱动

    3阶段——内核启动分析之make uImage编译内核(3)

    目标: 通过分析makefile,明白make uImage如何编译内核 把整个内核的makefile分成三类(makefile资料文档在linux-2.6.22.6/Documentation/build /makefiles.txt) <1>各级子目录makefile(每个子目录都有makefile) <2>/arch/arm/Makefile(架构相关的makefile) <3>顶层目录makefile obj-m += s3c24xx_buttons.o obj-m += ker_rw.o obj-$(CONFIG_LEGACY_PTYS) += pty.o obj-$(CONFIG_UNIX98 /arch/arm/Makefile中的uImage 3 分析顶层目录Makefile 3.1 顶层vmlinux生成过程 在顶层目录makefile中第484行得出: 484 all: vmlinux 其中,all就是直接 make 指令编译内核,显然make uImage和make都依赖于vmlinux(内核) 然后在746得到出vmlinux生成步骤: 746 vmlinux: $(vmlinux-lds

    1.6K60发布于 2018-01-03
  • 来自专栏Linux驱动

    3阶段——内核启动分析之make uImage编译内核(3)

    目标: 通过分析makefile,明白make uImage如何编译内核 把整个内核的makefile分成三类(makefile资料文档在linux-2.6.22.6/Documentation/build /makefiles.txt) <1>各级子目录makefile(每个子目录都有makefile) <2>/arch/arm/Makefile(架构相关的makefile) <3>顶层目录makefile obj-m += s3c24xx_buttons.o obj-m += ker_rw.o obj-$(CONFIG_LEGACY_PTYS) += pty.o obj-$(CONFIG_UNIX98 /arch/arm/Makefile中的uImage 3 分析顶层目录Makefile 3.1 顶层vmlinux生成过程 在顶层目录makefile中第484行得出: 484 all: vmlinux 其中,all就是直接 make 指令编译内核,显然make uImage和make都依赖于vmlinux(内核) 然后在746得到出vmlinux生成步骤: 746 vmlinux: $(vmlinux-lds

    1.2K100发布于 2018-01-03
  • 来自专栏悟空聊架构 | 公众号

    PHP内核之旅-3.变量

    PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli PHP内核之旅-3.变量 一、弱类型语言 php是弱类型语言。一个变量可以表示任意数据类型。 ) 布尔型boolean  全部类型如下: 1 /* regular data types */ 2 #define IS_UNDEF 0 3 Zend\zend_types.h 1 struct _zval_struct { 2 zend_value value; //用来保存具体的变量值 3 2. union u1 = 结构体v + type_info 3. 参考资料: http://www.php-internals.com/ 《PHP7内核剖析》 作  者: Jackson0714 出  处:http://www.cnblogs.com

    85860发布于 2018-05-18
  • 来自专栏悟空聊架构 | 公众号

    PHP内核之旅-3.变量

    ) 布尔型boolean  全部类型如下: 1 /* regular data types */ 2 #define IS_UNDEF 0 3 Zend\zend_types.h 1 struct _zval_struct { 2 zend_value value; //用来保存具体的变量值 3 2. union u1 = 结构体v + type_info 3. 9 zend_reference *ref; //引用类型 10 zend_ast_ref *ast; //内核使用的 参考资料: http://www.php-internals.com/ 《PHP7内核剖析》 作  者: Jackson0714 出  处:http://www.cnblogs.com

    63040发布于 2018-06-26
  • 来自专栏Linux驱动

    3阶段——内核启动分析之内核编译试验(1)

    目标: 1.给内核打补丁 2.配置 3.编译 4.重启   1 内核打补丁 1.1 通过FTP将Windows里system目录下linux-2.6.22.6.tar.bz2和linux-2.6.22.6 这是内核配置的过程。 (2) 我们的是arm架构,所以 cd  arch/arm/configs 进入configs目录,如下图所示,发现与2440相像的就只有s3c2410_deconfig。 ? (3)返回到linux-2.6.22.6顶层目录下,通过make s3c2410_defconfig 命令来配置,如下图所示 配置完后可以看出最后出现“configuration written to :表示这选项能被模块化(按下M键有响应) 3 编译(2种配置方法) 3.1 输入 make 命令直接编译 3.2 输入 make uImage 命令生成uImage内核文件(头部uImage+真正的内核

    1.4K50发布于 2018-01-03
  • 来自专栏嵌入式与Linux那些事

    S3C2440移植linux3.4.2内核内核裁剪

    为什么要裁剪内核?    因为mtd的kernel分区只有2M大,而实际内核有2.37MB,所以需要裁剪到小于2M(或者修改mtd分区值) 首先裁剪内核里无关的CPU/单板文件   通过vi .config,然后搜索2440,如下图所示 然后参考上图,make menuconfig   进入System Type —> SAMSUNG S3C24XX SoCs Support: ?    ,去掉: < > Second extended fs support //ext2 < > Ext3 journalling file system support <   如下图所示,内核启动时,看到初始化了PS2鼠标驱动 ?   

    2.5K40发布于 2021-05-20
  • 来自专栏Linux驱动

    3阶段——内核启动分析之make menuconfig内核配置(2)

    目标: 分析make menuconfig内核配置过程 在上1小结中(内核编译试验)讲到了3种不同的配置: (1)通过make menuconfig 直接从头到尾配置.config文件 (2) 通过make s3c2410_deconfig 命令在默认的配置上进行自动修改.config文件 (3)使用厂家提供的配置config_ok文件覆盖.config文件 所以,所有的配置结果都是配置.config文件 1 在linux下通过vi指令查看.config内核配置文件 ? (CONFIG_DM9000_MODULE) arch/arm/plat-s3c24xx/common-smdk.c:162:#if defined(CONFIG_DM9000) || defined( _MODULE) (3)在include/config/auto.conf中设置COMFIG_DM9000=y,供.

    1.3K90发布于 2018-01-03
  • 来自专栏Linux驱动

    3阶段——内核启动分析之make menuconfig内核配置(2)

    目标: 分析make menuconfig内核配置过程 在上1小结中(内核编译试验)讲到了3种不同的配置: (1)通过make menuconfig 直接从头到尾配置.config文件 (2) 通过make s3c2410_deconfig 命令在默认的配置上进行自动修改.config文件 (3)使用厂家提供的配置config_ok文件覆盖.config文件 所以,所有的配置结果都是配置.config文件 1 在linux下通过vi指令查看.config内核配置文件 ? (CONFIG_DM9000_MODULE) arch/arm/plat-s3c24xx/common-smdk.c:162:#if defined(CONFIG_DM9000) || defined( _MODULE) (3)在include/config/auto.conf中设置COMFIG_DM9000=y,供.

    1.7K50发布于 2018-01-03
  • 来自专栏python3

    《Linux内核设计与实现》第3

    《Linux内核设计与实现》第3版,英文版已经出版,中文版即将出版。 本书基于linux 2.6介绍了linux内核的设计与实现,涵盖了从核心内核系统的应用到内核设计与实现等各方面内容,主要内容包括:进程管理、调度、时间管理和定时器、系统调用接口、内存寻址、内存管理、页缓存 能够带领读者快速走进linux内核世界,真正开发内核代码。     如果你是一名linux内核爱好者,本书的内容可以帮助你大显身手。如果你是一名普通程序员,本书的内容将会拓宽你的编程思路。 如果你初次接触linux内核,本书则可以帮助你对内核各个核心子系统有一个整体把握。     本版新增内容: ·增加一章专门描述内核数据结构 ·详细描述中断处理程序 ·扩充虚拟内存和内存分配的内容 ·调试linux内核的技巧 ·内核同步和锁机制的深度描述 ·提交内核补丁以及参与linux

    2.1K20发布于 2020-01-07
  • 来自专栏ops技术分享

    linus服务器内核参数优化(3

    内核其他TCP参数说明: net.ipv4.tcp_max_syn_backlog = 65536 #记录的那些尚未收到客户端确认信息的连接请求的最大值。 net.core.netdev_max_backlog = 32768 #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。 时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。 这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。 net.ipv4.tcp_syn_retries = 2 #在内核放弃建立连接之前发送SYN包的数量。 873200 # TCP读buffer,可参考的优化值: 32768 436600 873200 net.ipv4.tcp_mem = 94500000 91500000 92700000 # 同样有3个值

    1.4K30发布于 2021-05-06
  • 来自专栏编程技术宇宙

    内核地址空间大冒险3:权限管理

    前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作。 详情参见:内核地址空间大冒险:系统调用 1 open系统调用链 我是一个线程,出生在这个Linux帝国。 在老爷爷的指点下,通过系统调用表来到了这个叫sys_open的地方。 也不在那里,是在task_struct->cred里面的,这个cred就是你的凭证,来咱们内核空间办事儿,到处都要检查,你可要收好了,弄丢了就麻烦了” ? “那现在怎么办? 3 UGO & ACL “先别气馁,还有机会!”,老伯突然拍了下我的肩膀。 “不是三道门都报错了吗,怎么还有机会呢?”,我小声的问道。

    56510发布于 2020-03-11
  • 来自专栏reizhi

    编译 Linux 内核启用 TCP BBR3

    随着时间的推移 TCP BBR 已经来到了 v3 版本,但因为尚处于测试阶段所以目前相关代码并没有汇入主线内核中。现阶段如果需要提前体验 BBR v3 的话手动编译内核是免不了的。 3.拷贝配置 我们的最终目的是编译开启 TCP BBR v3,并不是内核参数调优,所以直接拷贝 Debian 的内核参数即可。下载 Debian 6.5 内核到本机并使用 7z 打开。 5.编译内核 准备工作做完后编译内核反而是最简单的一步,执行以下命令并耐心等待即可。 make -j4 deb-pkg #可按照编译机 CPU 线程数设置编译线程 编译完成后在上层文件夹中会生成我们所需要的包含 BBRv3 模块的内核文件:linux-image-6.4.0-xxxx.deb 在任意机器上安装此内核即可启用 BBRv3 : dpkg -i linux-image-6.4.0-xxxx.deb # 文件名以实际为准 如何确认当前已启用的 BBR 版本: modinfo tcp_bbr

    3.6K20编辑于 2023-10-18
  • 来自专栏逆向技术

    内核开发知识3之串口过滤.绑定设备.

    参数2: 我们要绑定设备的设备名称 参数3: 绑定成功后返回设备对象指针的指针. 在内核结构中请求的传递都是用 IRP结构传递的.常见的数据结构就是IRP. 但是并不是唯一的.因为内核程序中.传递请求还有很多种方法. 不同设备也可能使用不同的请求结构来传递. SystemBuffer比较简单.一般用于比较简单且不追求效率的情况下的解决方案.也就是说吧R3(应用层数据) 拷贝到内核空间. UserBuffer是追求效率的. UserBuffer直接放到应用层数据当中.我们在内核中访问.当前进程跟发送请求进程一致的情况下.内核访问应用层空间没错.但是不一致也就是说内核进程切换了.那么这个访问就结束了. 因为在Windows内核中内存是一样的.但是在R3中.UserBuffer则不一致.所以切换了如果在访问UserBuffer则会访问到别的进程中.

    1.4K10发布于 2018-08-30
  • 来自专栏C++

    Windows核心编程:第3内核对象

    Github https://github.com/gongluck/Windows-Core-Program.git //第3内核对象.cpp: 定义应用程序的入口点。 // #include "stdafx.h" #include "第3内核对象.h" int APIENTRY wWinMain(_In_ HINSTANCE hInstance, else MessageBox(NULL, TEXT("创建了新的的Mutex"), TEXT("CreateMutex"), MB_OK); HANDLE hMutex3 FALSE, DUPLICATE_SAME_ACCESS); CloseHandle(hMutex);//调用CloseHandle后,句柄表中的对应值就被重置了,hMutex不会指向原来的内核对象 hMutex = nullptr;//良好的习惯 CloseHandle(hMutex2); hMutex2 = nullptr; CloseHandle(hMutex3)

    46520发布于 2018-06-22
  • 来自专栏旅途散记

    Linux内核分析与应用3-进程管理

    本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。 对于进程来说,它的静态表现就是程序,平时都安安静静呆在磁盘上,而一旦运行起来,就变成了计算机里的数据和状态的总和; 运行着的程序就是一个进程. ---- 3.2 Linux进程创建 对于进程,线程,内核线程 ,内核使用唯一的数据结构task_struct来分别表示,也使用相同的调度算法对其进行调度. 所有的系统调用进入内核只有一个入口,但进入以后就分道扬镳,各有各的服务历程;而分手是暂时的,最终还是会归到一处,do_fork就是它们的聚合点. 更多可参阅<深入理解Linux内核>第三版第七章 参考资料 [1] Linux 内核分析与应用: https://next.xuetangx.com/course/XIYOU08091001441/1516763

    39650编辑于 2023-09-23
  • 3步拆解Linux内核源码的思维模型

    3步拆解Linux内核源码的思维模型——从“不敢碰”到“庖丁解牛”一、第一步:资料收集与框架搭建——像拼图一样找到“地图”初看Linux内核源码的人,往往会被其千万行代码淹没。 但正如登山前需要地形图,阅读内核前必须构建认知框架。 1. 定位模块范围 内核不是用来通读的,而是按需切入。 代码注释:内核开发者习惯用英文注释标记设计意图,比如mm/page_alloc.c中的zone_watermark_ok()函数注释会解释内存水位线算法。 3. 3. 逆向追踪法 遇到复杂逻辑时,从问题现象反推代码。 3.

    32500编辑于 2025-04-21
  • 来自专栏韩曙亮的移动开发专栏

    【CSS3】浏览器私有前缀 ( WebKit 内核前缀 -webkit- | Gecko 内核前缀 -moz- | Trident 内核前缀 -ms- | Presto 内核前缀 -o- )

    一、浏览器私有前缀 1、" 浏览器私有前缀 " 引入 PC 端浏览器 对 CSS3 的支持力度是不同的 , 针对 不同的浏览器 , 使用 CSS3 样式 , 可以针对 不同的 浏览器 , 使用 不同的 CSS3 样式 ; 这里就需要引入 " 浏览器私有前缀 " 概念 ; 老版本的 浏览器 对 新版本的 CSS3 样式 支持不好 , " 浏览器私有前缀 " 是为了 照顾 老版本的浏览器 而 设定的 , 新版本浏览器 不需要 使用 私有前缀 ; 如果想要 提高 CSS3 样式 的 浏览器 的 兼容性 , 就需要使用大量的 " 浏览器私有前缀 " ; 2、" 浏览器私有前缀 " 列举 浏览器私有前缀 用于标识 CSS 属性 或 规则 尚未成为W3C标准的一部分 , 这些前缀有助于确保新属性在老版本浏览器中的兼容性 ; 常见的浏览器私有前缀 : -webkit- : WebKit 内核 的 浏览器 的 私有前缀 , 如 : Chrome 和 Safari 浏览器 ; -moz- : Gecko 内核 的 浏览器 的 私有前缀 , 如 : Firefox 浏览器 ; -ms- : Trident 内核 的 浏览器

    1.3K11编辑于 2024-03-12
  • 来自专栏嵌入式与Linux那些事

    S3C2440移植linux3.4.2内核内核框架介绍及简单修改

    ,步骤如下所示:   1)根据R1(机器ID),来判断内核是否支持该机器,若支持则初始化机器相关函数   2)解析TAG参数,初始化串口,设置内存等   3)挂载根文件系统,并执行应用程序 简单配置内核 设置机器ID   uboot传递进来的机器ID可以通过环境变量machid来设置   所以任意设置一个ID,这样再次启动内核时,内核识别不出来,就会打印出所有设备对应的机器ID。 ,所以打印出内核能支持的ID表: ?    ); s3c24xx_init_clocks(16934400); //初始化时钟clock s3c24xx_init_uarts(smdk2440 //初始化时钟clock   然后重新编译uImage: make s3c2410_defconfig //将mach-s3c2440.c配置进内核 make uImage

    1.7K20发布于 2021-05-20
  • 来自专栏陶辉笔记

    linux内核调度算法(3)–多核系统的负载均衡

    Linux内核是如何在多核间调度进程的呢?又是内核又是CPU核,两个核有点绕,下面称CPU处理器来代替CPU核。 实际上,如果你没有对你的进程做过特殊处理的话,LINUX内核是有可能把它放到多个CPU处理器上运行的,这是内核的负载均衡。 上文说过,每个处理器上有一个runqueue队列,表示这颗处理器上处于run状态的进程链表,在多处理器的内核中,就会有多个runqueue,而如果他们的大小很不均衡,就会触发内核的load_balance 当然,多核CPU也有许多种,例如INTEL的超线程技术,而LINUX内核对一个INTEL超线程CPU会看成多个不同的CPU处理器。 上面说过,如果你没有对你的进程做过特殊处理的话,LINUX内核是有可能把它放到多个CPU处理器上运行的,但是,有时我们如果希望我们的进程一直运行在某个CPU处理器上,可以做到吗?

    4.5K30发布于 2019-06-21
领券