10 2023 档案
摘要:一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的相关寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: a -- I/O 映射方式(I/O-mapped) 典型地,如X
阅读全文
摘要:Linux中如何构建内核源码树,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 要编写Linux的驱动,必须要构建内核源码树。 内核源码树的作用是构造可以在Linux内核中装载和卸载的模块,因此若是要为目标板构造模块,必须保证用于构建内核
阅读全文
摘要:本文是参考了网上多篇帖子而写的算不上什么原创。唯一值得欣慰的只不过在本机上实现罢了。因为毕竟失败了几次。也因为本人是初学驱动编程,很多简单的问题在我来说是相当的困难的。望有识之士不要笑话。最后,希望本文能给刚学驱动而还没开头的人提供一些帮助。刚看 O'REILLY 写的《LINUX 设备驱动程序》时
阅读全文
摘要:一、环境 Ubuntu14.04 +vmware tools 二、步骤 先写个.c文件,驱动文件一般没有printf,有自己的一套,先写一个helloword.c /* * helloworld.c * * 宇文凌风 * */ #include "linux/init.h" #include "li
阅读全文
摘要:一、构造内核源码树 # apt-cache search linux-source # apt-get install linux-source-4.4.0(下载的源码在目录/usr/src下) # 解压内核源码tar xjf ..... 进入源码目录 # make oldconfig # make
阅读全文
摘要:1.手动创建文件节点的命令(mknod): 命令 文件目录&名称 文件类型 主设备号 次设备号 mknod /xxx/xx c 120 1 2.手动删除文件节点的命令(rm): 命令 文件目录&名称 rm /xxx/xx from: https://blog.csdn.net/wanzhilin88
阅读全文
摘要:注:本文个人学习记录 目的:一个工程里有多个makefile 如何make根目录下的makefile 调用子目录下的makefile,编译所有.c文件 如图所示 目录结构 ,根目录server: makefile ;子目录 so :makefile 根目录makefile: GCC=gcc APP=
阅读全文
摘要:编译概述 编译基础: 使用GCC编译程序时可以分为4个阶段: (1)预处理(pre-processing)-E.c >.i-I (Include)将源文件生成中间文件 (2)编译(compiling) -S .i >.s 将中间文件生成汇编 (3)汇编(Assembling) -c .s >.o 将
阅读全文
摘要:第1章 Makefile快速入门 基础概念 make :项目构建工具——用于管理文件的更新 Makefile:规则文件,告诉make如何进行编译与管理 Makefile(取名makefile也行)其实就是一个脚本文件。 快速入门 创建文本文档——文件名Makefile #代表注释 显示规则:一条显示
阅读全文
摘要:每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”。一般的风格都是: clean: rm edit $(objects) 更为稳健的做法是: .PHONY : clean clean : -rm edit $(objec
阅读全文
摘要:gnu-makemakefile Using Makefile to clean subdirectories 是否可以从父目录执行make clean,而该父目录又递归清除所有子目录,而不必在每个子目录中都包含makefile? 例如,当前在我的Makefile中,我有类似以下内容: 123456
阅读全文
摘要:前言 由于项目需要,接触多个公司的RK3568,正点原子的,创龙的,迅为的。最后选择了创龙的。做了一段时间,发现给的教程和其他参考资料很少。所以必须一点一点得自己试验。以后的文章页会一点一点的写。希望给需要的小伙伴带个路。 资料中 大部分功能在用户资料里面有,小伙伴一步步可以跟着做,仅仅说一般工程需
阅读全文
摘要:一、Linux 内核模块编译的本质make modules 命令的执行路径只能是内核源码顶层目录,执行结果是:读取内核源码顶层目录中的 Makefile 文件,找到里面定义的 modules 目标。(更详细的内容不在此处分析) 我们可以建立一个文件夹存放模块源代码,写一个 Makefile,里面写
阅读全文
摘要:搜索顶层makefile发现会有两个modules目标,它们的定义分别如图3.13和3.14,查看代码发现它们分别位于ifeq ($(KBUILD_EXTMOD),)和else的条件中。KBUILD_EXTMOD的定义可以参考图2.5,即若编译的为外部模块(含有M=xxx参数),则将其设置为1,否则
阅读全文
摘要:在linux下编译可加载内核模块形成.ko文件的makefile中的核心语句是: $(MAKE) -C $(KERNEL_DIR) M=(PWD) modules这句是Makefile的规则:这里的 $(MAKE)就相当于make;-C 选项的作用是指将当前工作目录转移到你所指定的位置,一般都是内核
阅读全文
摘要:在内核编译时,主要涉及一下文件: kernel/arch/arm/configs/*.defconfig kernel/driver/*/Makefile kernel/driver/*/Kconfig 如果我们想要往内核中增加新的节点,还要涉及到设备树文件,kernel/arch/arm/boot
阅读全文
摘要:编译驱动一般采用的是将驱动编译成模块(.ko 文件),然后加载到内核,这其中就用到了 make modules 命令。 目录 一、单模块编译 1、一个 c 文件编译成一个 ko 文件 2、多个文件编译成一个 ko 文件 二、多模块编译(多文件多模块) 一、单模块编译1、一个 c 文件编译成一个 ko
阅读全文
摘要:makefile中PHONY的重要性 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签。伪目标通过 PHONY来指明。 PHONY定义伪目标的命令一定会被执行,下面尝试分析这种优点的妙处。 1、如果我们指定的目标
阅读全文