参考源码:x3399_nougat_industry

驱动路径:kernel/drivers/leds/leds-gpio

首先找到leds目录下的Makefile文件

obj-$(CONFIG_LEDS_GPIO)                 += leds-gpio.o

再找到Kconfig文件

config LEDS_GPIOtristate "LED Support for GPIO connected LEDs"depends on LEDS_CLASSdepends on GPIOLIB || COMPILE_TESThelpThis option enables support for the LEDs connected to GPIOoutputs. To be useful the particular board must have LEDsand they must be connected to the GPIO lines.  The LEDs must bedefined as platform devices and/or OpenFirmware platform devices.The code to use these bindings can be selected below.

再找到配置文件x3399_defconfig:

#
# LED drivers
#
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
# CONFIG_LEDS_LM3530 is not set
# CONFIG_LEDS_LM3642 is not set
# CONFIG_LEDS_PCA9532 is not set
CONFIG_LEDS_GPIO=y
# CONFIG_LEDS_LP3944 is not set
# CONFIG_LEDS_LP5521 is not set
# CONFIG_LEDS_LP5523 is not set

为什么要选 x3399_defconfig配置而不是其他,是因为./mk.sh 脚本固定了的

#
# Target Config
#
BS_CONFIG_BOOTLOADER_UBOOT=x3399_defconfig
BS_CONFIG_KERNEL=x3399_defconfig
BS_CONFIG_KERNEL_DTB=x3399-development-board.img
BS_CONFIG_FILESYSTEM=PRODUCT-rk3399_all-userdebug

交叉编译工具链:找到kernel/Makefile下的文件,搜索CROSS_COMPILE即可找到以下定义。由于ARCH = arm64 支持64位

ARCH            ?= arm64
ARCH            ?= $(SUBARCH)
ifeq ($(ARCH),arm64)
ifneq ($(wildcard $(srctree)/../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu),)
CROSS_COMPILE   ?= $(srctree)/../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
endif
ifneq ($(wildcard $(srctree)/../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9),)
CROSS_COMPILE   ?= $(srctree)/../prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
endif
endif
ifeq ($(ARCH),arm)
ifneq ($(wildcard $(srctree)/../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf),)
CROSS_COMPILE   ?= $(srctree)/../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
endif
ifneq ($(wildcard $(srctree)/../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9),)
CROSS_COMPILE   ?= $(srctree)/../prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androidkernel-
endif

解读代码可以得知所用的工具链是以下这个:

CROSS_COMPILE   ?= $(srctree)/../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

简单验证:

zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds$ mkdir leds
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds$ cp -rf *.c leds/
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds$ cd leds
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$ ls
dell-led.c         leds-asic3.c       leds-cobalt-qube.c  leds-gpio-register.c  leds-lm355x.c  leds-lp55xx-common.c  leds-mc13783.c    leds-pca955x.c    leds-sead3.c      leds-wm831x-status.c
led-class.c        leds-att1272.c     leds-cobalt-raq.c   leds-hp6xx.c          leds-lm3642.c  leds-lp8501.c         leds-menf21bmc.c  leds-pca963x.c    leds-ss4200.c     leds-wm8350.c
led-class-flash.c  leds-bcm6328.c     leds-da903x.c       leds-ipaq-micro.c     leds-locomo.c  leds-lp8788.c         leds-net48xx.c    leds-powernv.c    leds-sunfire.c    leds-wrap.c
led-core.c         leds-bcm6358.c     leds-da9052.c       leds-is31fl32xx.c     leds-lp3944.c  leds-lp8860.c         leds-netxbig.c    leds-pwm.c        leds-syscon.c     led-triggers.c
leds-88pm860x.c    leds-bd2802.c      leds-dac124s085.c   leds-ktd2692.c        leds-lp5521.c  leds-lt3593.c         leds-ns2.c        leds-rb532.c      leds-tca6507.c
leds-aat1290.c     leds-blinkm.c      leds-fsg.c          leds-lm3530.c         leds-lp5523.c  leds-max77693.c       leds-ot200.c      leds-regulator.c  leds-tlc591xx.c
leds-adp5520.c     leds-clevo-mail.c  leds-gpio.c         leds-lm3533.c         leds-lp5562.c  leds-max8997.c        leds-pca9532.c    leds-s3c24xx.c    leds-versatile.c
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$

新建一个Makefile文件。  添加以下内容。

#!/bin/bash
export ARCH=arm64 #外部环境变量
obj-m += leds-gpio.o 编译的模块KDIR := /home/zdong/rockchip/x3399_nougat_industry/kernel #内核路径PWD ?= $(shell pwd) #当前路径
all:make -C $(KDIR) M=$(PWD) modulesclean:make -C $(KDIR) M=$(PWD) modules clean

编译运行:

zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$ make
make -C /home/zdong/rockchip/x3399_nougat_industry/kernel M=/home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds modules
make[1]: Entering directory '/home/zdong/rockchip/x3399_nougat_industry/kernel'CC [M]  /home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds/leds-gpio.oBuilding modules, stage 2.MODPOST 1 modulesCC      /home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds/leds-gpio.mod.oLD [M]  /home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds/leds-gpio.ko
make[1]: Leaving directory '/home/zdong/rockchip/x3399_nougat_industry/kernel'
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$

查看编译的模块:

zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$ ls *.ko
leds-gpio.ko
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$

删除模块:

zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$ make clean
make -C /home/zdong/rockchip/x3399_nougat_industry/kernel M=/home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds modules clean
make[1]: Entering directory '/home/zdong/rockchip/x3399_nougat_industry/kernel'LD      /home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds/built-in.oBuilding modules, stage 2.MODPOST 1 modulesCLEAN   /home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds/.tmp_versionsCLEAN   /home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds/Module.symvers
make[1]: Leaving directory '/home/zdong/rockchip/x3399_nougat_industry/kernel'
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$

前面的交叉编译工具链只是为了验证,实际其实是可以不用去管他的。

编写一个简单的测试用例,随意命名为led_gpio_test.c :

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main(int argc, char** argv)
{while(1){system("echo 0 > /sys/devices/platform/leds/leds/led1/brightness");sleep(1);system("echo 1 > /sys/devices/platform/leds/leds/led1/brightness");sleep(1);}return 0;
}

这样既可实现LED2不断的交替闪烁。

重写Makefile:

#!/bin/bash
export ARCH=arm64
obj-m += leds-gpio.o
rtos = led_gpio_testKDIR := /home/zdong/rockchip/x3399_nougat_industry/kernel
CC = /home/zdong/rockchip/x3399_nougat_industry/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gccPWD ?= $(shell pwd)
all:make -C $(KDIR) M=$(PWD) modules$(CC) $(rtos).c
clean:make -C $(KDIR) M=$(PWD) modules clean

该路径下会编译生成a.out文件,即为可执行文件。

zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$ make
make -C /home/zdong/rockchip/x3399_nougat_industry/kernel M=/home/zdong/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds modules
make[1]: Entering directory '/home/zdong/rockchip/x3399_nougat_industry/kernel'Building modules, stage 2.MODPOST 1 modules
make[1]: Leaving directory '/home/zdong/rockchip/x3399_nougat_industry/kernel'
/home/zdong/rockchip/x3399_nougat_industry/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc led_gpio_test.c
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$ ls
a.out              leds-adp5520.c     leds-cobalt-qube.c  leds-gpio.mod.c       leds-lm3530.c  leds-lp5562.c         leds-mc13783.c    leds-pca963x.c    leds-sunfire.c        led-triggers.c
dell-led.c         leds-asic3.c       leds-cobalt-raq.c   leds-gpio.mod.o       leds-lm3533.c  leds-lp55xx-common.c  leds-menf21bmc.c  leds-powernv.c    leds-syscon.c         Makefile
led-class.c        leds-att1272.c     leds-da903x.c       leds-gpio.o           leds-lm355x.c  leds-lp8501.c         leds-net48xx.c    leds-pwm.c        leds-tca6507.c        modules.order
led-class-flash.c  leds-bcm6328.c     leds-da9052.c       leds-gpio-register.c  leds-lm3642.c  leds-lp8788.c         leds-netxbig.c    leds-rb532.c      leds-tlc591xx.c       Module.symvers
led-core.c         leds-bcm6358.c     leds-dac124s085.c   leds-hp6xx.c          leds-locomo.c  leds-lp8860.c         leds-ns2.c        leds-regulator.c  leds-versatile.c
led_gpio_test.c    leds-bd2802.c      leds-fsg.c          leds-ipaq-micro.c     leds-lp3944.c  leds-lt3593.c         leds-ot200.c      leds-s3c24xx.c    leds-wm831x-status.c
leds-88pm860x.c    leds-blinkm.c      leds-gpio.c         leds-is31fl32xx.c     leds-lp5521.c  leds-max77693.c       leds-pca9532.c    leds-sead3.c      leds-wm8350.c
leds-aat1290.c     leds-clevo-mail.c  leds-gpio.ko        leds-ktd2692.c        leds-lp5523.c  leds-max8997.c        leds-pca955x.c    leds-ss4200.c     leds-wrap.c
zdong@ubuntu:~/rockchip/x3399_nougat_industry/kernel/drivers/leds/leds$

leds-gpio 驱动编译进内核相关推荐

  1. linux 编译mini2440的驱动程序,把驱动编译进内核的3种方法(mini2440 key按键为例)...

    把驱动编译进内核的3种方法(mini2440 key按键为例) 把驱动编译进内核的3种方法-----(mini2440 key按键为例) 方法1:单独以模块的方式编译及加入内核的方法(最简单的方法) ...

  2. 编译内核_将驱动编译进内核(Kernel)的步骤记录

    1.首先在/kernel/drivers下建立驱动文件:以建立hello文件为例 2.在hello文件下创建.c/Makefile/Kconfig三个文件 3..c文件存放驱动程序:Makefile存 ...

  3. Linux WIFI驱动编译进内核——RTL8188EUS

    1.准备好Realtek提供的RTL8188EUS驱动源码: 2.将RTL8188EUS驱动源码拷贝进开发板的内核源文件目录/driver/net/wireless/rtl818x: 3.修改/dri ...

  4. Linux驱动模块编译进内核中

    BQ27501驱动编译进内核 一.       驱动程序编译进内核的步骤 在 linux 内核中增加程序需要完成以下三项工作: 1. 将编写的源代码复制到 Linux 内核源代码的相应目录: 2. 在 ...

  5. 【内核配置】六、修改内核自带的的LCD驱动源码并编译进内核 | 烧写到Mini2440__TD35 完整攻略...

    主   机:VMWare--Ubuntu-16.04.2-x64-100ask 开发板:Mini2440--256M NandFlash, 2M NorFlash, 64M SDRAM, LCD-TD ...

  6. Linux嵌入式驱动开发02——驱动编译到内核

    文章目录 全系列传送门 make menuconfig图形化配置界面 1. 怎么进入到make menuconfig图形化界面? 2. make menuconfig图形化界面的操作 3. 退出 4. ...

  7. linux rootfs编译进内核,九鼎x6818开发板笔记:uboot、kernel、rootfs编译和烧写

    下面记录了如何搭建嵌入开发环境,如何编译uboot.kernel.和文件系统,如何烧写镜像以及如何配置uboot环境变量. 阅读注意:记录中(Base框中的内容)一些操作故意被添加,为了展示文件内容, ...

  8. 标准linux4.4--驱动开发(二)GPIO驱动编写

    标准linux4.4--驱动开发(二)GPIO驱动编写 简介 介绍GPIO DTS配置 在驱动文件中关联DTS的配置 驱动说明 中断 复用 FAQs 简介 1.什么是linux内核模块 在linux中 ...

  9. openharmony GPIO 驱动开发

    openharmony GPIO 驱动开发 GPIO 基础知识 GPIO 基础知识--概念 GPIO 基础知识--IO 复用 GPIO 基础知识--GPIO 分组和编号 GPIO 基础知识--用户态测 ...

最新文章

  1. 力扣(Leetcode)-94. 二叉树的中序遍历
  2. svn提交错误file is scheduled for addition, but is missing
  3. Linux基础(九)--定时任务
  4. 阿里上线了一款新的电商app
  5. 【elasticsearch系列】双击elasticsearch.bat闪退,日志排查报错信息
  6. DM8168的SPI接口
  7. 计算机程序C语言若初始数为48,2016年计算机软考程序员模拟选择试题
  8. mysql 页 存储,MySQL InnoDB Engine--数据页存储和UPDATE操作
  9. 用Java开源项目JOONE实现人工智能编程
  10. Drupal 7.31 SQL注入漏洞
  11. 专业显卡深度学习_MacOS+AMD-eGPU打造深度学习环境 | 第2期
  12. 使用NVM安装升级PNPM报错的问题
  13. 如何利用Xshell远程登陆主机后使用代理服务器上网
  14. linux shell写cgi,shell写cgi脚本
  15. 许嵩的60句感人歌词,道出了学生时代实在爱情的伤与痛~
  16. 用cmd进入DOS窗口的步骤
  17. awk——awk基础介绍
  18. 关于cpu limit 和memory limit 的一些资料
  19. 企业为什么要建立独立电商网站?
  20. 关于计算机与教育的英语作文,信息技术对教育的影响英文作文

热门文章

  1. 想做期货,应该从哪开始学?
  2. 视频教程-清华-尹成老师-java基础-Day2-Java
  3. 分布式系统技术点汇总
  4. 高中英语选修计算机,人教版高中英语选修计算机英语CategoriesofComputers.ppt
  5. 西交大软件工程考研是c语言,给20考研软件工程的学弟学妹分享一些自己的经验~...
  6. VC操作Excel之sercies、Trendline
  7. vsan虚拟化和共享存储服务器,1.1 vSAN入门及数据存储
  8. bzoj 2081 [Poi2010]Beads
  9. javaWeb开发中为什么要使用框架
  10. strtok函数的基本使用