Android深度探索(卷1)HAL与驱动开发--读书笔记(第七章)

发布者:自由梦想最新更新时间:2024-09-29 来源: cnblogs关键字:Android  HAL  驱动开发 手机看文章 扫描二维码
随时随地手机看文章

LED控制发光二级管

1.实现原理:与本机的I/0 内存进行交互。所谓I/0 内存是通过各种接口连接到主机的硬件在主机内存中的映射。然后Linux 内核会利用I/0 内存中的数据硬件交互。Linux 内核提供了多个与1/0 内存交互的函数。每一个连接Linux 的硬件在ν0 内存中都会有映射首地址。


2.编写LED驱动

1)         adb shell  “ echo ’1’ > /de>/s3c6.410 leds'

2)         adb shell  ” echo ’ 1010 ’> /dev/s3c6410_leds'

3)         adb shell  “echo  ‘ 1 111 ‘> /dev/s3c6410_leds ”

4)         sh  ~/drivers/s3c6410 leds/test leds.sh

5)         执行test_leds.sh脚本文件

for((i=0 ,i<16; i=i+1))

do

#将十进制数转换为二进制格式

N=$(echo “base=2;$i “ l bc)

Echo $n

Echo $n > temp

N=$(rev temp)

// 向 LED 驱动的设备文件发送控制 LED 的数据

adb shell 'echon > /dev/s3c6410 leds ”

// 延迟l 秒钟

sleep 1

done

3.创建LED 驱动的设备文件步骤

1)使用cdev_init 函数初始化cdev:描述设备文件需要一个cdev 结构体。该结构体在<Linux 内核源代码>/include/linux/cdev.h 文件中定义。

2)指定设备号Linux 设备文件的设备号分为主设备号和次设备号。

3)使用cdev_add 函数将字符设备添加到内核中的字符设备数组中

4)使用class_create 宏创建struct class:struct class 包含了一些与设备文件有关的变量以及一些回调函数指针变量。

5)使用device_create 函数创建设备文件: device_create 函数用于创建设备文件,该函数在<l.inux 内核源代码>/incIude/linux/device.b,文件中定义


4. 卸载LED 驱动的设备文件

卸载 Linux 驱动的设备文件稍微简单-些,需要依次调用 device_destroy 、 class_destroy 和unregister_chrdev_region 方法。这3 个方法的原型如下:

void device_destroy(struct class *class, dev_t devt)

void class_destroy(struct class *els)

void unregister_chrdev_region (dev_t from, unsigned count)


关键字:Android  HAL  驱动开发 引用地址:Android深度探索(卷1)HAL与驱动开发--读书笔记(第七章)

上一篇:(linux自学笔记)linux内核定时器的使用
下一篇:〖Android〗OK6410a的Android HAL层代码编写笔记

推荐阅读最新更新时间:2026-02-11 07:32

STM32F407VET6开发板移植基于HAL库的正点原子LCD屏幕驱动
up的开发板长这个样子: 比较便宜XD 屏幕的话是2.8寸带触摸的TFT LCD屏幕,驱动是ILI9341。 首先,在CubeMX中创建初始化配置文件需要配置的选项如下图, (LED0,LED1与Key1,2,3,4与LCD驱动无关): 需要对RCC,SYS的固定配置以及时钟树的改动此处不作介绍。可看最后的参考文章链接。 首先配置LCD_BL,即背光控制相关的GPIO。管脚脚位选择需要看开发板的原理图。我的原理图是这样的: 可以看到需要将PB1配置为LCD_BL。 具体配置如下图: 之后配置FSMC: 此处LCD Register Select信号也需要看你的开发板原理图。我的是这样的: 可以
[单片机]
STM32F407VET6<font color='red'>开发</font>板移植基于<font color='red'>HAL</font>库的正点原子LCD屏幕<font color='red'>驱动</font>
TQ210搭载Android4.0.3系统构建之BEEP从驱动HAL到JNI到应用程序(上层应用篇)
其实上层应用篇 很简单 对于BeepActivity.java 可能需要注意一下的就是 包名、类名、方法名的编写一定要与JNI层定义的方法名要一致 不然会提示找不到JNI层的方法的 比如 包名com.under.beep 类名BeepActivity 方法名beepOn BeepActivity.java package com.under.beep; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.view.Menu; import android
[单片机]
TQ210搭载Android4.0.3系统构建之BEEP从驱动HAL到JNI到应用程序(驱动篇)
上篇LED的驱动程序编写采用混杂设备的方式,此篇Beep的驱动程序的编写采用platform设备驱动,并对platform的机制做个简单的分析。 先看硬件电路图 通过一个NPN的三极管控制BUZZER,因为BUZZER是直流电压式驱动,需要三级管提供的放大电流才能发声, 所以只要三极管导通,给XpwmTOUT1高电平,BUZZER即可发声。 platform_device的编写 beep_under_device.c #include linux/module.h #include linux/init.h #include linux/printk.h #include linux/platform_
[单片机]
TQ210搭载<font color='red'>Android</font>4.0.3系统构建之BEEP从<font color='red'>驱动</font>到<font color='red'>HAL</font>到JNI到应用程序(<font color='red'>驱动</font>篇)
TQ210搭载Android4.0.3系统构建之LED从驱动HAL到JNI到应用程序(驱动篇)
开发板:TQ210 OS:Android 4.0.3 以下所有内容都是在TQ210开发板上实现,并且很多内容也是天嵌公司提供,我将一些内容进行了删减、替换,然后加入了一些自己的理解,同时也是记录自己学习的旅程。 废话不多说 先看硬件电路图 很简单 通过NPN三极管控制LED的阴极 NPN三极管的基极给高电平 则三级管导通 则LED等点亮 反之则熄灭 LED驱动源码 led_unders.c #include linux/miscdevice.h //包含miscdevice misc_register... #include linux/init.h //包含__init __exit... #inclu
[单片机]
TQ210搭载<font color='red'>Android</font>4.0.3系统构建之LED从<font color='red'>驱动</font>到<font color='red'>HAL</font>到JNI到应用程序(<font color='red'>驱动</font>篇)
TQ210搭载Android4.0.3系统构建之ADC从驱动HAL到JNI到应用程序(JNI篇)
ADC的JNI层采用的方式与BEEP中JNI层采用的方式是一致的,采用Java+包名+类名+方法名,具体见BEEP的JNI层 直接上源码 adc_under_jni.c #include android/log.h #include jni.h #include hardware/hardware.h #include hardware/adc_under_hal.h static struct adc_hw_device_t *adc_device=NULL; #define true 1 #define false 0 static inline int adc_open(struct hw_mo
[单片机]
开发可统计单词个数的Android驱动程序(1)
Android本质上是基于Linux内核的系统,也就是说Android就是一种Linux操作系统。只不过大多数时候都会运行在ARM架构的设备上,例如,Android手机、平板等。Android驱动实际上就是Linux驱动,只是这里使用 Android深度探索(卷1):安装C/C++交叉编译环境 介 绍的交叉编译器将Linux驱动编译成了ARM架构的,所以驱动可以安装在Android模拟器、Android手机(需要root)或平板上(这些设备 都要使用给予ARM架构的CPU),当然,使用传统的GCC也可以编译成X86架构的驱动(并不需要修改代码),这样也可以在Ubuntu Linux上安装Linux驱动。 本文及后面几篇文
[单片机]
<font color='red'>开发</font>可统计单词个数的<font color='red'>Android</font><font color='red'>驱动</font>程序(1)
stm32hal库串口BUG
今天在使用stm32f407的HAL库发现一个BUG。当时我中断使用多了、把所有time定时器使用了4个外部中断、不管怎么调整nvic不管用。这个时候HAL串口接收功能已经崩溃、已经无法正确接受数据、串口发送也会卡死。这个网上可以查到这个BUG是由于hal库运行速度缓慢导致的、目前没有很好的办法解决。 这个时候我果断转了ll库、瞬间解决再也没有这些问题了。稳。 当然这个bugF不管103还是F4都是存在的。
[单片机]
STM32 HAL库 模拟SPI驱动 DAC8564
之前写过DAC8560的模拟SPI驱动,相比较而言DAC8564能够在网上找到的内容更加的丰富,本文主要是介绍讲解STM32 HAL库使用模拟SPI驱动DAC8564。 DAC8560 https://www.bilibili.com/opus/519334650730238240 SPI相关的简介: https://www.bilibili.com/opus/515342298243272188 然后是用STM32CubeMx初始化模拟SPI的引脚: STM32CubeMx的GPIO输出的配置可以参考: https://www.bilibili.com/opus/484177792198506654 这里
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved