首页 > 系统相关 >04_Linux下把驱动编译进内核

04_Linux下把驱动编译进内核

时间:2024-04-25 22:49:05浏览次数:26  
标签:04 v7 defconfig 编译 内核 Linux imx config

Linux下把驱动编译进内核

需求:

把前面课程学习的helloworld驱动编译到内核。

例子:

source"drivers/redled/Kconfig"
config LED_4412
	tristate "Led Support for GPIO Led"
	depends on LEDS CLASS
	help
	This option enable support for led

说明:

1.source “drivers/redled/Kconfig”

他会包含drivers/redled/这个路径下的驱动文件,方便我们对菜单进行管理

2.config LED__4412

配置选项的名称,CONFIG_LED_4412

3.tristate 表示的驱动的状态,把驱动编译成模块,把驱动编译到内核,不编译

与之对应的还有bool 分别是编译到内核,不编译

“Led Support for GPIO Led” make menuconfig显示的名字

A depends on B

表示只有在选择B的时候才可以选择A

4.比如我想直接去掉LED相关的去掉,我们直接改.config文件可以吗?

可以,但是不推荐。如果有依赖的话,直接修改.config是不成功的。

5.select

​ 反向依赖,该选项被选中时,后面的定义也会被选中。

help

This option enable support for led

帮助信息

实例:

sudo apt-get install lzop
sudo apt-get install u-boot-tools

注意这两个依赖,没有会导致编译报错,打开板子不打印helloworld

进入内核源码目录

image-20240418135508010

进入drivers/char/中, "cd drivers/char/"

image-20240418135615431

创建hello文件夹,并进入

image-20240418135701497

拷贝helloworld.c到hello文件夹,创建Kconfig文件

image-20240418135734254

编写Kconfig

config HELLO
    tristate "hello world"
    help
    hello hello

创建Makefile

image-20240418140209623

编写Makefile

# $(CONFIG_HELLO):根据我们选择的驱动的状态去改变,选择编译到内核就是y(obj-y),选择编译到模块就是m(obj-m)
# CONFIG_HELLO 名称是由Kconfig中的HELLO,前面+CONFIG_得到
obj-$(CONFIG_HELLO)+=helloworld.o

返回上一级目录

image-20240418140559798

修改Makefile

image-20240418150930758

修改Kconfig

image-20240418142407285

返回源码根目录

"export ARCH=arm"

输入"make menuconfig"

image-20240418142602621

image-20240418142704171

image-20240418142731400

按空格变成* --> 编译进内核

image-20240418142827246

保存退出

进入.config,查看hello

image-20240418143043212

查看create.sh

image-20240418143331816

编译时使用的是arch/arm/configs/imx_v7_defconfig这个文件来编译的,不是使用我们修改make menuconfig生成的.config文件

使用"make distclean"清除所有的编译文件

image-20240418143702303

使用"cp arch/arm/configs/imx_v7_defconfig .config"将imx_v7_defconfig 复制成.config

意思是菜单上都是特色菜,但需要加一道菜

image-20240418143839400

使用"make menuconfig"再将hello world编译进内核

image-20240418144013588

保存退出

进入arch/arm/configs/ 将imx_v7_defconfig改成imx_v7_defconfig_nohello

"cd arch/arm/configs/"

"mv imx_v7_defconfig imx_v7_defconfig_nohello"

将我们内核根目录使用make menuconfig生成的.config 复制到arch/arm/configs/下,并改成imx_v7_defconfig

"cp /home/mzx/imx6ull/linux-imx-rel_imx_4.1.15_2.1.0_ga/.config imx_v7_defconfig"

image-20240418144615056

返回内核源码根目录, 运行脚本 "./create.sh"

image-20240418150744832

查看drivers/char/hello/下有helloworld.o文件,说明编译成功

image-20240418151337975

将arch/arm/boot下的zImage文件烧录到开发板上

image-20240418151450748

标签:04,v7,defconfig,编译,内核,Linux,imx,config
From: https://www.cnblogs.com/mzx233/p/18158781

相关文章

  • 14_Linux 设备树
    一.什么是设备树?设备树是一种描述硬件资源的数据结构。它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独立。有了初步概念之后,我们再来一起探讨设备树的起源。二.设备树的由来要想了解为什么会有设备树,设备树是怎么来的,我们就要先来回顾一下在没有设备树之前......
  • Linux文件系统与日志分析
    目录1.inode与block(1)inode的内容(2)inode的号码(3)inode的大小(4)inode的特殊作用2.硬链接与软连接3.恢复误删的文件(1)恢复EXT类型的文件(2)恢复XFS类型的文件4.分析日志文件(1)日志文件(1)日志的功能:(2)日志文件的分类:(3)日志保存位置(2)内核及系统日志(2)日志消息的级别(3)日志记录的一般格式(3)用户日志......
  • 24/04/25 图论
    \(\color{purple}(1)\)P5478[BJOI2015]骑士的旅行给定一颗\(n\)个节点的树。有\(m\)个骑士,最开始第\(i\)个骑士在\(p_i\)节点上,武力值为\(f_i\)。接下来有\(q\)次操作\((t_i,x_i,y_i)\):\(t_i=1\),输出树上\(x_i,y_i\)路径上的前\(k\)大骑士的武力值。......
  • inode(index node)是Unix、Linux和类Unix操作系统中的一个重要概念, 在Windows操作系统中
    inode(indexnode)是Unix、Linux和类Unix操作系统中的一个重要概念,用于描述文件系统中的文件或目录。每个文件或目录都与一个inode相关联。inode包含以下信息:文件或目录的权限(读、写、执行)。文件类型(普通文件、目录、符号链接等)。拥有者和所属组。文件的大小。访问、修......
  • vim查看linux文件目录,05Linux.浏览目录和文件,VIM文本编辑器
    vim查看linux文件目录,05Linux.浏览目录和文件,VIM文本编辑器一、浏览目录和文件查看目录、查看文件属性1)查看根目录/下有哪些文档或子目录,观察颜色有什么规律ls/2)以长格式显示结果,对比/bin、/usr/bin/目录详细属性ls-ld/bin/usr/bin/【-d只显示目录本身】3)......
  • linux压缩
    市面上有非常多的压缩格式:zip格式:Linux、Windows、MacOS,常用7zip:Windows系统常用rar:Windows系统常用tar:Linux、MacOS常用gzip:Linux、MacOS常用在Linux系统中操作:tar、gzip、zip这三种压缩格式tar命令语法:tar[-z-x-v-f-c-C]参数1参数2选项:-c,创建压缩文件,用于压缩......
  • 04、数据保护技术
    数据保护技术1.磁盘镜像制作1.1.Windows磁盘镜像制作及恢复GetDataForeniscImager该工具安装后,可将安装后的文件复制出来(类似绿色运行)使用(需要管理员运行):https://getdataforensics.com/product/fex-imager/ DataNumenDiskImage1.2.Linux磁盘镜像制作(命令行)lsblk:查......
  • linux系统管理
    1.用户、用户组创建用户useradd[-g-d]用户名选项:-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g选项:-d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名删除用户userdel[-r]用户名选项:-r,删除用户的HOME目录,不使用-r,删......
  • Ubuntu 16.04 LTS 升级到 Ubuntu 18.04 LTS
    Ubuntu从16.04升级到18.04版本_ubuntu16upgrade了18的库-CSDN博客......
  • 在线版CAD二次开发修改UI配置的方法(纯国产内核网页CAD)
    前言我们根据mxcad开发包开发了一个完整的在线CAD应用,它包括了绘图、编辑、文字样式设置、图层设置、线型设置等功能的实现。我们同时提供了一个插件的开发接口,用户可以在该接口的基础上进行二次开发,这样就能够为用户减少从头开发的工作量,可以快速将一个完整的CAD项目集成到用......