- 博客(8)
- 收藏
- 关注
原创 platform之字符设备创建
在嵌入式系统里,想要对GPIO管脚等进行操作的话,需要在内核中注册一个字符设备及相应的驱动。字符设备提供了对IO地址的映射,从而可以使用虚拟地址对各寄存器进行读写。字符设备驱动实现设备的初始化,关联到设备文件,提供通用的open、release、ioctl、read、write等接口。最终应用程序才能通过这些文件接口,间接控制设备。设备号分为主设备号和次设备号,设备驱动通过主设备号来与设备...
2018-04-14 20:52:28 931
原创 linux内核学习笔记之虚拟文件系统
虚拟文件系统(VFS)是内核的一个子系统,为用户提供通用的系统调用,而无需考虑具体文件系统和介质。VFS抽象层定义了所有文件系统都支持的、基本的、概念上的接口和数据结构。图1如图1所示内核通过VFS把不同类型的文件系统连接在一起,给用户提供一个通用的接口(如read/write等)。不同的文件系统所提供的接口不同,从而对文件的操作也不一样。通过VFS就能实现从ext2到ext3的文件拷贝等操作,而...
2018-04-14 20:48:05 217
原创 linux内核学习笔记之内存管理
linux内核把物理页作为内存管理的基本单位。每一页的大小根据系统架构不同有所区别,32位系统下为4KB,64位系统下为8KB。内存管理单元(MMU)以页为单位来管理系统中的页表,负责虚拟地址到物理地址的转换,用户所使用的内存地址一般都是虚拟地址。内核中页的结构体中比较重要的成员为:struct page { unsigned long flags; /* 页的状态,包括脏标志...
2018-04-09 21:05:05 238
原创 linux内核学习笔记之设备与模块
模块linux设备类型分为字符设备(cdev)、块设备(blkdev)、网络设备(netdev)。字符设备是不可寻址的,仅提供对数据的流式访问,如键盘、鼠标等。通过称为“块设备节点”的特殊文件来进行访问,该设备通常被挂载为文件系统。块设备是可寻址,支持对数据的随机访问,如硬盘、光碟等。可以直接通过文件接口访问设备节点来进行交互。网络设备提供了对网络的访问,通过特定的协议(如IP),来进行通信。但该...
2018-04-07 20:44:18 449
原创 应用程序中各数据段的划分
应用程序数据分段如下:BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量或静态变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。最终通过将零页映射到指定的内存区域,即可将内存区域的数据清0。该段不占用可执行文件的大小,在运行时才会去初始化。对于未初始化的全局变量,在编译阶段变量是被放在COMMMON段内...
2018-04-06 12:37:52 1358
原创 GDB调试工具的使用
GDB(GNU Project debugger)是linux下和程序调试工具,主要用于用户态程序。具有VC等IDE工具提供的调试功能,能够执行单步跟踪、设置断点、查看变量等操作。使用GDB还可以对运行中的线程、多线程进行调试。操作步骤如下:一、启动GDB有以下几种启动方式:1、以gdb启动可执行文件 2、运行程序后,单独启动gdb,在gdb中挂载进程二、执行gdb命令进行调试如果是以第1种方式启...
2018-04-05 10:12:59 556
原创 C语言sizeof的计算方式
对于C语言开发人员来说,sizeof应该不陌生吧。此次我主要写的是sizeof对各变量长度的计算方式。sizeof这个函数主要是对各数据类型的长度进行计算,入参为数据类型,返回值计算结果。但由于不同OS的系统架构下,sizeof计算的结果会存在一定的差异。下文主要基于32位系统,讨论sizeof的计算方式。比较常见的场景是基本数据类型长度的计算结果如下:类型32位系统(bytes)64位系统(by...
2018-04-04 22:12:11 4115
原创 初次写博客,请大家关照!
hello, world!对C语言、linux内核、网卡驱动、tcp/ip协议感兴趣的可以关注我,希望和大家一起讨论技术问题,一起进步。接下来我将会给大家分享下自己的收获。...
2018-04-04 19:07:25 144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人