为了用内核驱动程序点亮一个LED灯,真是费尽周折,参考了韦东山的《嵌入式linux驱动开发完全手册》(以下简称《完全手册》)和网上很多人的blog,最终在@Carlos·Wei的指引下,终于点亮了LED灯,见下图!

其中的一些弯路主要是没严格按照韦东山的linux版本和其编译器来编译内核和驱动程序,二来是因为韦东山这本书当时写的不是那么详细,在理解上有些许偏差。

下面在写这篇博客时列出我的开发环境等信息

开发环境

linux Ubuntu 16.04

arm-linux-gcc-3.4.5-glibc-2.3.6 版本(用《完全手册》指定的编译器,我当时用的arm-linux-gcc4.4.3版本,结果编译出的程序在JZ2440开发板上无法运行)

开发板中u-boot为板载资料提供

开发板中linux内核版本为linux-2.6.22.6

开发板中yaffs文件系统为板载资料提供

一、点亮一个LED灯需要做的准备工作

首先引用宋宝华《linux设备驱动开发详解》中P66的一段话

在linux内核中增加程序需要完成以下3项工作。

将编写的源代码复制到linux内核源代码的相应目录中。

在目录的Kconfig文件中增加关于新源代码对应项目的编译配置选项。

在目录的Makefile文件中增加对新源代码的编译条目。

确保按照韦东山的那个PDF对内核文件进行打补丁在进行后续工作哦!

第一步:修改linux-2.6.22.6内核文件

1)配置顶层Makefile(主要是配置编译器为arm-linux-gcc-3.4.5-glibc-2.3.6所在路径)

2)增加s3c2440配套的内核驱动源程序到 /drivers/char/ 目录下

????由于韦东山在《完全手册》的资料里提供的/drivers/leds/s3c24xx_leds.c是适配V2和V1版本的,笔者使用的是JZ2440_V3版本,不做修改就执行以下步骤你在V3版本上是点不亮的哦。V3版本的LED是链接到GPF上的,不是GPB上,如图:

所以,这里要做一下调整才行的:

3)配置 /drivers/char 目录下的Kconfig

4)配置 /drivers/char目录下的Makefile

第二步:配置menuconfig

在内核linux-2.6.22.6根文件目录下执行

make menuconfig

在内核目录树内依次选择

Device Drivers --->

????Character devices --->

???????? S3C2440_LEDS MULTIMICRO(NEW)

在光标停留在S3C2440...选项上时,可以通过敲击前盘空格来配置是将改驱动程序编译到内核中还是编译为一个.ko文件(独立的文件,可供内核加载),本文加载到内核汇里面去了,免去了加载到内核中的繁琐。然后配置完后,一路Exit然后Yes即可,配置后终端会提示如下信息:

第三步:将驱动程序编译至内核中

然后在分别执行

make s3c2410_defconfig

make -j8

make s3c2410_defconfig 作用先不做解释(也可不执行该命令!)

然后在执行

make uImage -j8

结果如图,可以看出编译好的内核文件uImage已经生产,在/arch/arm/boot/目录下面,此时的内核文件中已经包含了s3c2400的LED驱动程序。

第四步:编译驱动测试程序

该程序目的是为了调用内核中的LED驱动函数

改程序在韦东山《完全手册》配套的光盘资料里面的/drivers_and_test/leds/s3c24xx_leds.c中

在编译改.c程序前,首先修改.c同一目录下得Makefile文件,主要是配置为与编译内核一致的编译器

然后make一下就会生产可执行文件

make

至此,准备工作都已经完成,接下来开始使用这些生成的uImage 和 led_test文件

二、测试LED内核驱动

第一步:烧录uImage内核文件

首先把上文产生的内核文件uImage烧录至jz2440开发板中(默认你已经烧录了yaffs文件系统哦,否则无法再终端进行一下步骤),重启开发板后,可以在终端看到如下界面

然后在终端按下回车会看到如下界面,现在就可以使用cd、ls等命令了

第二步:将上文生产的led_test可执行文件传输至开发板中

可以用ftp传

可以用scp传

可以用U盘传(本文选用此种方式)

用u盘传就要挂载U盘了,以此处为基准倒数第二个图片可以看到 [sda] 这些信息行,其上还有我的U盘型号 SanDisk Cruzer Force,表示开发板已经检测到了U盘,因为我的在U盘一直在开发板上插着,所以启动时就自动检测了。当然你插上U盘后也会显示这些信息,通过

fdisk -l

可以查看U盘的的设备点,然后下一步就是在开发板的/mnt/目录下建立一个文件夹,用于将U盘的里的文件都挂载到这个文件夹下,我在/mnt/文件夹下建立了一个sandisk的文件夹。

接下来就可以挂载U盘到sandisk文件夹下了,执行以下命令:

mount -t auto /dev/sda1 /mnt/sandisk

然后cd到sandisk文件夹下就可以ls出U盘里的内容了,将led_test文件cp到开发板/usr/bin/文件夹下就ok了

第三步:建立led驱动设备文件

执行命令(详见《完全手册》P395)

mknod /dev/leds c 231 0

第四步:执行内核驱动测试程序

执行命令

led_test 1 on

led_test 1 off

可以看到开发板的第一个led点亮和熄灭

若你的led_test可执行文件不在开发板/usr/bin/文件夹下,那在改可执行文件所在目录下执行

./led_test 1 on

./led_test 1 off

也可以的

若提示Illegal instruction那说明你编译led_test执行文件所使用的编译器和编译内核的编译器不是同一个!改成同一个编译器就好了

linux内核3.4 led驱动,JZ2440_V3_内核驱动程序_点亮一个LED灯(示例代码)相关推荐

  1. 【51单片机】【8*8 LED矩阵如何开发】【点亮一个led却出现一列全部点亮问题解决】

    8*8 LED矩阵第一个灯 为了提升软件编码能力,不愿当码农的码农发起向软件工程师征程的号角,学习硬件,首先从简单的51开始,慢慢扩展知识点. 看了几节基础视频,LED点亮的原理就是控制板子上连接LE ...

  2. lajp linux教程,linux IMX6 汇编点亮一个LED灯

    驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动. IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD ...

  3. 如何利用CubeMX生成代码驱动STM32H750点亮一个LED灯

    如何利用CubeMX生成代码驱动STM32H750点亮一个LED灯 CubeMX软件的配置 GPOI或者说引脚配置 第一步 第二步 工程文件的配置 最后一步:完整生成好的代码 CubeMX软件的配置 ...

  4. 从零点亮一个led灯

    Stm32学习笔记一:stm32cubemx和keil5从零开始点亮一个LED灯 一.软件材料准备:stm32cubemx和keil5软件(下载方式可自行上网搜,这里不再详细叙述) 二.硬件材料准备: ...

  5. 使用无线WIFI模块NodeMCU Lua V3物联网开发板8266-01/01S 在Arduino搭建环境到点亮一个LED灯

    使用无线WIFI模块NodeMCU Lua V3物联网开发板8266-01/01S 在Arduino搭建环境到点亮一个LED灯 软件下载 基于Arduino环境搭建 点亮一个LED灯 上传成功 修改代 ...

  6. 51单片机入门教程(1)——点亮一个LED灯

    51单片机入门教程(1)--点亮一个LED灯 一.什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器 ...

  7. 51单片机(入门保姆级教程)——点亮一个LED灯

    一.为什么要学习单片机? 作为一名工科学生,进入大学参加各种活动,例如:电子设计大赛.寻迹车比赛.LED电子灯比赛以及各种各样的微控.弱控强电路等,都离不开单片机的身影.电路.c语言.数电.模电.计算 ...

  8. 从点亮一个LED开始,Cortex-A9裸机程序设计

    电路原理图: 如何点亮一个LED? 通过对原理图进行分析,我们能够发现给三极管的基极加上一个高点平时,三级管be结导通构成通路,此时二极管就点亮了.若要将LED熄灭只需取消高电平输出. 如何使三级管基 ...

  9. 【华为云技术分享】玩转小熊派BearPi(一)使用STM32CubeMX + HAL点亮一个LED

    最近刚刚入手了一块小熊派开发板,玩了一下感觉这块核心板可玩性挺高,板载ST-Link,240*240LCD小屏幕,而且体积非常小巧,可以说是入门物联网的一块非常不错的板子,先放上一张靓照: 这块小熊派 ...

最新文章

  1. vue 函数 路由跳转_vue中通过路由跳转的三种方式
  2. 空间统计笔记之一(基础知识)
  3. mybatis的执行流程
  4. 汇编: dup伪指令
  5. 【附10】kibana创建新的index patterns
  6. linux sli 提高效率,从原理到性能提升 MCP78智能SLI全解析
  7. ie6 下最佳 PNG透明方案【转】
  8. Android视频: YUV转RGB
  9. 技巧 | 如何使用R语言的基础绘图系统的拼图功能
  10. uml点餐系统活动图_大学生网上订餐系统--UML建模
  11. html调取android手机录音并保存,html5网页录音插件Recorder
  12. English Writing Note
  13. 【Ubuntu】QT程序 could not find or load the Qt platform plugin “xcb“ in “报错解决
  14. npm run serve stage1@0.1.0 serve vue-cli-service serve node:internal/modules/cjs/loader:936
  15. python getcwd_python – 执行os.getcwd()时出错?
  16. 【开关电源】matlab/simulink入门
  17. SQL server和MySQL编号自动生成
  18. 正则表达式收藏(三)之高级技巧
  19. echarts rich设置动态图片/动态数据;echarts 人均收入柱状图 window系统显示不出国旗;echarts动态rich
  20. (手机自适应)成人高考自考资讯网源码 织梦dedecms模板

热门文章

  1. Bootstrap4速成笔记二 Alert,Badge,Breadcrumb,Button
  2. 完美世界2最新服务器叫什么,完美世界手游2月25日服务器数据互通一览
  3. python图像处理应用的前景_浅谈图形图像处理的应用及发展前景
  4. 服务器电源管理系统SPM 价格,Liebert SPM 2.0服务器电源管理系统:在对比中彰显技术特性和性能优势...
  5. 发动机转速和曲轴位置传感器作用、安装及类型
  6. 含文档+PPT+源码等]精品基于Nodejs实现的智慧小区服务系统[包运行成功]Nodejs毕业设计计算机项目源码
  7. 深入理解二叉树的前中后序
  8. 计算机网络通讯用的路由器hs编码,项目三进出口商品归类习题解答
  9. Apache HTTP Server 2.4.49 路径穿越漏洞复现及利用
  10. matlab imshow显示图像详解