linux源码目录分析

Linux内核源码目录

操作系统最基本的功能应该有任务调度、资源管理、内存管理、进程通信等。然后在此基础上添加一些扩展功能,比如文件系统、HTTP协议栈、shell等。

通性

下面是RT-Thread的源码,其中src是内核源码,实现最基本的功能(include是一些头文件),而component是基于src添加的高级功能,比如文件系统,TCP/IP协议栈等。
在这里插入图片描述

Linux源码也是一样的,只不过源码目录比上面大很多。kernel、ipc、mm算是Linux内核的东西,drivers、fs算是基于内核的一些高级功能。
在这里插入图片描述

重点理解arch和drivers目录,其它目录见名知意,以及documentation目录,此目录下有许多对应的帮助/说明文档。

参考

Linux内核目录结构介绍:该文介绍了Linux内核源码的各个文件夹的作用,以及drivers文件夹下各个文件夹的作用。

arch/arm目录的理解

对arch/arm目录的理解

每种架构下,都包含有boot、config、kernel、lib、Kconfig文件或目录,拿ARM架构来说,arch/arm/kernel目录下的head.S文件是linux系统启动的第一个文件;arch/arm/kernel目录下的trap.c文件,对CPU的异常进行初始化;arch/arm/kernel目录下的dma.c,对CPU的dma进行管理;Kconfig文件里的内容在执行make menuconfig时会出现在界面中;configs目录下是一些默认配置文件,可以用来生成内核需要的配置文件.config,执行make menuconfig也会生成一个.config文件,.config文件指导编译时需要编译哪些文件,最终生成的vmlinux就是能够运行在该架构下的linux内核;mach-SoC名 目录下的文件,描述了该SoC内部硬件资源(如地址、大小等),mach-Board文件是描述板子资源的文件。

学习嵌入式Linux驱动开发时,有时会到arch下面找驱动,有时会到drivers下找驱动,这两个文件家有什么不同呢?我的理解是这样的:

  • arch下的驱动跟具体的平台有关,比如针对不同的SOC。
  • 而drivers下的驱动是某一类设备的驱动,与平台无关,比如USB子系统、input子系统等,Linux内核开发者抽象出一些API给其它人使用。

如何切入Linux内核源码

如何切入Linux内核源码:该文从如何到Linux内核中寻找usb驱动说起,讲解了一些不错的学习方法。

如何移植Linux内核自带的驱动

一般驱动都在drivers下或者arch目录对应的架构下,我们可以通过阅读各个目录下的Kconfig、Makefile、Readme来获得相关信息,以及Documentation目录下对应的说明/帮助文档,以及Documentation/devicetree目录下对应的设备树结点编写要求。

  • 自带驱动在那里?
    • drivers目录下
    • arch目录下对应的架构中也有一些驱动
  • 如何修改和使用自带驱动?
    • Documentation目录下对应驱动的帮助文档(有些驱动是没有帮助文档的)
  • 如果自带驱动是基于设备树的,那么应该怎么编写设备树结点?
    • 参考Documentation/devicetree目录下对应的绑定文档
    • 如果没有对应的绑定文档,那么就只有自己分析驱动程序来编写对应的设备树结点了。

正x原x教程中出现的Linux内核自带驱动移植教程

触摸屏、pwm(如何使用nxp自带的pwm驱动)、led灯驱动、按键驱动、USB驱动、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值