![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
s5pv210开发板学习
三星s5pv210开发板学习,包括系统移植和驱动
李嘉图Y
凡是过往,皆为序章
展开
-
S5PV210-串口设置
S5PV210 包含 4 个异步收发器(UART),提供 4 个独立的异步串行输入/输出(I/O)端口。所有端口可工作于中断模式或 DMA 模式。提供高达 3Mbps 的位速率。每个 UART 包含 2 个 FIFO 用于接收和发送数据。具有可编程的波特率、红外收发、 1 位或 2 位停止位、 5~8 位数据位、校验。数据发送:要发送的数据帧是可编程的。它包含 1 位起始位, 5~8 位数...原创 2019-06-20 14:48:12 · 649 阅读 · 0 评论 -
S5PV210-时钟初始化
1:s5pv210的时钟域MSYS Domain:为处理器、3D、intc(中断)、DMC0、DMC1、IRAM、IROM提供时钟,HCLK_MSYS:200MHZ、PCLK_MSYS:100MHzDSYS Domain:为音视频等设备提供时钟,HCLK_DSYS:166MHZ、PCLK_DSYS:83MHzPSYS Domain:为外设提供时钟,如GPIO、I2C、PWM、UART、WDT...原创 2019-06-19 18:35:46 · 540 阅读 · 0 评论 -
基于smart210的内核移植(四)添加NAND硬件 ECC
NAND 8 位硬件 ECC本篇接着上一篇讲添加nand硬件ECC在 mach-smdkv210.c 中添加头文件<linux/mtd/mtd.h>添加 nand_ecclayout 定义 OOB 布局,同时赋值给 smdk_nand_sets, 设置 disable_ecc 属性为假修改 NAND 驱动 drivers/mtd/nand/s3c2410.c,里面所用到的寄...原创 2019-04-22 23:06:06 · 584 阅读 · 0 评论 -
基于smart210的内核移植(三)NAND FLASH
NAND FLASH在我们移植成功dm9000网卡驱动和nfs服务器之后,事实上我们已经可以通过nfs服务器挂载文件系统,整个开发板的系统已经搭建完毕了,只不过内核和文件系统都存在内存里,一旦掉电所有数据都会消失。我们接下来就进行NAND FLASH的驱动移植。三星提供的 NAND FLASH 驱动为 drivers/mtd/nand/s3c2410.c,只支持 S3C2410/S3C2440...原创 2019-04-21 21:35:25 · 638 阅读 · 0 评论 -
基于smart210内核移植(二)DM9000和NFS
dm9000和nfs的移植标题本篇接着进行dm9000和nfs的移植在 arch/arm/mach-s5pv210/mach-smdkv210.c 中已经配置了 DM9000 的平台设备相关的数据,我们只需要修改就行了。在 arch/arm/mach-s5pv210/include/mach/map.h 中只定义了 S5PV210_PA_SROM_BANK5 的基地址,smart210 ...原创 2019-04-20 19:56:15 · 897 阅读 · 0 评论 -
基于smart210开发板的内核移植(一)
简述本人的开发板是友善之臂的smart210,学习内核移植已经有些时间了,期间的过程可谓历经千辛万苦,想必学习嵌入式的朋友们都有体会,最近想把学习内核移植的过程做一下笔记,完整的记录一下内核移植的过程,一方面希望可以帮助到刚开始学习内核移植的朋友,另一方面也是纯粹的做一下总结,方便自己以后回顾。内核初步配置我使用的内核版本是3.10.46,u-boot版本是2014.04,随后我也会做一个u...原创 2019-04-20 18:49:13 · 1307 阅读 · 1 评论 -
Linux输入子系统分析
之前我们学的都是简单的字符驱动,涉及的内容有字符驱动的框架、自动创建设备节点、linux中断、poll机制、异步通知、同步互斥/非阻塞、定时器去抖动。其中驱动框架如下:1)写file_operations结构体的成员函数: .open()、.read()、.write()2)在入口函数里通过register_chrdev_region()创建驱动名,生成主设备号,赋入file_operati...原创 2019-05-17 15:37:34 · 449 阅读 · 0 评论 -
基于smart210的按键驱动(poll机制)
1.上次我们使用了中断机制完成了smart210的按键驱动,本篇则是在此基础上使用poll机制来完成按键的操作while (1){read(fd, &key_val, 1);printf(“key_val = 0x%x\n”, key_val);}在没有poll机制的情况下,大部分时间程序都处在read中休眠的那个位置。如果我们不想让程序停在这个位置,而是希望当有按键按下时,我...原创 2019-05-13 17:20:22 · 398 阅读 · 0 评论 -
基于smart210的按键驱动(异步通知)
之前写的驱动方式是:1)查询方式:一直读2)中断方式.同样一直读,直到中断进程唤醒3)poll机制:一直在poll函数中睡眠,一定时间读一次以上3种,我们都是让应用程序主动去读,本次我们学习异步通知,它的作用就是当驱动层有数据时,主动告诉应用程序,然后应用程序再来读, 这样,应用程序就可以干其它的事情,不必一直读比如:kill -9 pid ,其实就是通过发信号杀死进程,kill发数据9...原创 2019-05-13 17:38:17 · 420 阅读 · 0 评论 -
基于smart210的按键键盘驱动(input子系统)
在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动实现键盘驱动,让开发板的4个按键代表键盘中的L、S、空格键、回车键1.先来介绍以下几个结构体使用和函数1)input_dev驱动设备结构体中常用成员如下:struct input_dev { void *private; const char...原创 2019-05-17 17:32:04 · 476 阅读 · 0 评论 -
platform机制实现驱动层分离
1.我们之前学习的input子系统的分层解构如下如上图所示,分层就是将一个复杂的工作分成了4层, 分而做之,降低难度,每一层专注于自己的事情, 系统只将其中的核心层和事件处理层写好了,所以我们只需要来写驱动层即可,接下来我们来分析platform机制以及分离概念2.分离概念优点:1)将所有设备挂接到一个虚拟的总线上,方便sysfs节点和设备电源的管理2)使得驱动代码,具有更好的扩展性和...原创 2019-05-18 10:39:36 · 584 阅读 · 0 评论 -
基于smart210的按键驱动(定时器防抖)
1.定时器有两个概念:1,超时时间:2,时间到了之后的“处理函数”。可以在中断处理中,如定时 10ms 后处理确定按键值上报。产生中断我们先来看看两个全局变量:jiffies: 是系统时钟,全局变量,默认每隔10ms加1HZ:是每S的频率,通过系统时钟换算出来,比如每隔10ms加1,那么HZ就等于100定时器结构体timer_list:timer_list常用结构体成员如下所示:...原创 2019-05-17 11:30:54 · 454 阅读 · 0 评论 -
基于Smart210的按键驱动(中断方式)
接下来就写一个使用中断的按键驱动实例通过查看smart210的与原理图可以找到按键的IO口和中断号这里我们只需要使用request_irq函数就行了, 在request_irq函数里会初始chip->set_type(设置引脚和中断模式)1、添加头文件#include <Linux/irq.h>2.因为要操作寄存器,所以先定义指针volatile unsigned...原创 2019-05-10 14:17:53 · 522 阅读 · 0 评论 -
Linux驱动开发常用头文件
头文件目录中总共有32个.h头文件。其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个。这些头文件各自的功能如下:1、主目录<a.out.h>:a.out头文件,定义了a.out执行文件格式和一些宏。<const.h>:常数符号头文件,目前仅定义了i节点中i_mode字段的各标志位。<ctype.h>:字符类型头...原创 2019-05-15 12:47:43 · 515 阅读 · 0 评论 -
class_create(),class_device_create()或device_create()自动创建设备文件结点
/*2.6.15中的函数:class_device_create();class_device_destroy();在2.6.27中变为:device_create()device_destroy()此函数声明在:include/linux/device.h函数原型:drivers/base/core.c*/class_create(),class_device_create()...原创 2019-04-26 22:34:01 · 538 阅读 · 0 评论 -
基于smart210的LED驱动
写了一个LED的驱动程序和测试程序 先说驱动程序,主要实现了一下几个函数test_chrdev_open(),test_chrdev_release(),test_chrdev_read(),test_chrdev_write(),这几个函数分别对应了上层的open(),close(),read(),write()函数,当上层用户空间调用open(),write()等函数时,实际上在内核空...原创 2019-04-27 20:03:29 · 508 阅读 · 0 评论 -
LInux驱动编程class_create说明
从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下:struct class *mycl...原创 2019-04-29 13:31:39 · 1147 阅读 · 0 评论 -
基于smart210的按键驱动(查询机制)
上次写了一个LED的驱动程序,今天又在此基础上写了一个按键查询的驱动,使用了class结构体,在加载驱动时自动创建了设备文件,很方便驱动代码如下#include <linux/device.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#i...原创 2019-04-29 22:17:45 · 431 阅读 · 0 评论 -
基于smart210的LED驱动(platform机制)
1. 使用platform机制,编写LED驱动层首先创建设备代码和驱动代码:led_dev.c 、led_drv.cled_dev.c用来指定灯的引脚地址,当更换平台时,只需要修改这个就行led_drv.c用来初始化灯以及如何控制灯的逻辑,当更换控制逻辑时,只需要修改这个就行2.编写led.dev.c2.1编写led_dev.c之前先来看看platform_device结构体和要使用的函...原创 2019-05-18 22:19:06 · 1149 阅读 · 0 评论 -
Linux设备驱动模型(一)
1、设备模型引入Linux 2.6内核最初为了应付电源管理的需要,提出了一个设备模型来管理所有的设备。在物理上,外设之间是有一种层次关系的,比如把一个U盘插到笔记本上,实际上这个U盘是接在一个USB Hub上,USB Hub又是接在USB 2.0 Host Controller (EHCI)上,最终EHCI又是一个挂在PCI Bus上的设备。这里的一个层次关系是:PCI->EHCI->...原创 2019-05-09 16:08:27 · 638 阅读 · 0 评论 -
Linux设备驱动模型(二)
前文我们知道了/sys是包含内核和驱动的实施信息的,用户可以通过 /sys 这个接口,用户通过这个接口可以一览内核设备的全貌。本文将从Linux内核的角度来看一看这个设备模型是如何构建的。1、kobject 结构在Linux内核里,kobject是组成Linux设备模型的基础,一个kobject对应sysfs里的一个目录。从面向对象的角度来说,kobject可以看作是所有设备对象的基类,因为C...原创 2019-05-09 16:31:17 · 376 阅读 · 0 评论 -
Linux设备驱动模型(三)
总线设备驱动模型其实现主要是基于Kobject和sysfs等机制,对于驱动模型程序开发主要是理解三个元素:总线、设备、驱动的关系。三者之间因为一定的联系性实现对设备的控制。首先是总线,总线是三者联系起来的基础,通过一种总线类型,将设备和驱动联系起来。总线类型中的match函数用来匹配设备和驱动。当匹配操作晚餐之后就会控制驱动程序中的probe函数。总线设备驱动模型的设计主要包括三个元素的注册,...原创 2019-05-09 16:41:28 · 475 阅读 · 0 评论 -
分析中断3大结构体irq_desc、irq_chip、irqaction
我们先来看看irq_desc中断描述结构体有什么内容:struct irq_desc { irq_flow_handler_t handle_irq; //指向中断函数, 中断产生后,就会执行这个handle_irq struct irq_chip *chip; //指向irq_chip结构体,用于底层的硬件访问,下面会介绍 ...原创 2019-05-10 10:56:22 · 3251 阅读 · 0 评论 -
注册注销中断request_irq函数和free_irq函数
在上一篇文章中我们分析了中断的三个结构体irq_desc、irq_chip、irqaction,并且简单分析了中断发生的流程,实际上上述的操作我们是不需要自己实现的,内核已经实现了,我们需要做的是如何去注册一个中断,编写相应的中断处理函数,当中断发生时,内核会自动执行中断处理函数。当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handle...原创 2019-05-10 11:21:09 · 1063 阅读 · 0 评论 -
注册字符设备函数register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
初学linux驱动,在网上找了一些代码,但是充满了疑惑,很多函数的功能总是搞不清楚,总感觉写驱动是有很多个版本,格式不是统一的。下面给大家分享一下内核提供的注册字符设备的三个函数register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()的区别,相信大家在学习驱动的过程中也会遇到相似的疑问。内核提供了三个函数来注册一组字符设...原创 2019-04-26 22:08:29 · 1204 阅读 · 0 评论