s3c6410平台的linux驱动分析
在s3c6410处理器上,基于2.6内核,对linux驱动的各个子模块进行详细的分析,例如看门狗,串口等等,主要包括这些驱动的实现模型和具体的代码分析。
tianxiawuzhei
热爱技术,喜欢探究,喜欢记录和分享。
展开
-
linux下的nandflash驱动分析(2)——基于s3c6410平台
1、在上一篇的probe函数中,在那个很大的for循环中出现了,对NAND的厂商,设备号,是MLC或SLC进行判断,这些是怎样进行的呢?其实这些都是在NAND芯片中定义的,我们只需按对应的时序读出这些信息,就可以进行判断,看下面这个图(摘于一个NAND芯片手册):2、上一篇中,nand_scan(s3c_mtd, 1)函数没有细说,这一篇说下这个函数,源码如下:原创 2012-05-30 19:36:00 · 3977 阅读 · 1 评论 -
linux下的nandflash驱动分析(1)——基于s3c6410平台
源码主要在S3c_nand.c (linux2.6.28\drivers\mtd\nand)文件中。1、模块加载和卸载module_init(s3c_nand_init);module_exit(s3c_nand_exit);static void __exit s3c_nand_exit(void){platform_driver_unregister(&s3c245原创 2012-05-29 10:47:52 · 4414 阅读 · 0 评论 -
linux中触摸屏驱动的实现(3)——基于s3c6410处理器
linux中触摸屏驱动的实现(1)——基于s3c6410处理器的链接地址linux中触摸屏驱动的实现(2)——基于s3c6410处理器的链接地址1、上一篇分析的是两个中断处理函数中的其中一个触摸屏中断,现在来分析另外一个ADC中断,对应的中断函数是stylus_action。当触摸屏在自动X/Y位置转换模式和独立的X/Y位置转换模式时,当坐标数据转换之后会产生IRQ_A原创 2012-05-26 21:53:10 · 2581 阅读 · 1 评论 -
linux中触摸屏驱动的实现(2)——基于s3c6410处理器
linux中触摸屏驱动的实现(1)——基于s3c6410处理器的链接地址上一篇主要讲述了linux中触摸屏设备作为平台设备存在的模块加载和卸载函数,还有就是对应的probe函数和remove函数,这一篇说下在probe函数中注册的两个中断处理函数。1、先来说第一个中断处理函数——触摸屏中断,对应的中断处理函数是stylus_updown,当触摸屏被按下时,会产生中断信号IR原创 2012-05-26 20:12:08 · 4067 阅读 · 0 评论 -
linux中触摸屏驱动的实现(1)——基于s3c6410处理器
这几篇文章主要是关于linux中触摸屏驱动的,基于s3c6410处理器进行分析。这一篇主要是关于触摸屏设备作为平台设备的实现,还有对应的probe函数和remove函数的源码分析。1、触摸屏模块的加载和卸载函数static char banner[] __initdata = KERN_INFO "S3C Touchscreen driver, (c) 2008 Samsung Elect原创 2012-05-26 18:29:32 · 3844 阅读 · 1 评论 -
linux中LCD设备驱动(6)——Fbmem.c文件
前面几篇主要关注的是LCD驱动在6410平台上的实现,这一篇来说下linux帧缓冲设备驱动的上层建筑Fbmem.c文件。1、先上第一道菜:1.1、那我们现在来说Fbmem.c (linux2.6.28\drivers\video)文件中的应用程序访问帧缓冲设备的接口,大家对下面这些应该都不陌生吧。:/** * fbmem_init - init frame buffer s原创 2012-05-25 22:02:13 · 7476 阅读 · 0 评论 -
linux中LCD设备驱动(5)——基于s3c6410平台
s3c6410硬件DISPLAY CONTROLLER(显示控制器)的地址链接linux中LCD设备驱动(1)——framebuffer(帧缓冲)的地址链接linux中LCD设备驱动(2)——基于s3c6410平台的地址链接linux中LCD设备驱动(3)——基于s3c6410平台的地址链接linux中LCD设备驱动(4)——基于s3c6410平台的地址链接原创 2012-05-25 16:34:41 · 2769 阅读 · 0 评论 -
linux中LCD设备驱动(4)——基于s3c6410平台
s3c6410硬件DISPLAY CONTROLLER(显示控制器)的链接地址linux中LCD设备驱动(1)——framebuffer(帧缓冲)的链接地址linux中LCD设备驱动(2)——基于s3c6410平台的链接地址linux中LCD设备驱动(3)——基于s3c6410平台的链接地址我们这一篇来说与具体的TFT显示器有关的部分原创 2012-05-24 22:29:50 · 5465 阅读 · 0 评论 -
linux中LCD设备驱动(3)——基于s3c6410平台
s3c6410硬件DISPLAY CONTROLLER(显示控制器)的地址链接linux中LCD设备驱动(1)——framebuffer(帧缓冲)的链接地址linux中LCD设备驱动(2)——基于s3c6410平台的链接地址上一篇在说LCD设备驱动对应的probe函数时,没有说完,这一篇接着继续说probe函数。s3cfb_pre_init();上一次说到了这个原创 2012-05-24 18:26:39 · 3583 阅读 · 2 评论 -
linux中LCD设备驱动(2)——基于s3c6410平台
s3c6410硬件DISPLAY CONTROLLER(显示控制器)的链接地址linux中LCD设备驱动(1)——framebuffer(帧缓冲)的链接地址上一篇说了framebuffer帧缓冲的有关知识,这一篇具体的说下LCD驱动的实现。1、LCD设备驱动在linux内核中是作为平台设备存在,所以又要说那些已经说过很多遍的东西。int __devinit s3cf原创 2012-05-24 16:08:10 · 4650 阅读 · 0 评论 -
linux中LCD设备驱动(1)——framebuffer(帧缓冲)
1、framebuffer 帧缓冲 帧缓冲(framebuffer)是Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由帧缓冲设备驱动本身来完成。 framebuffer机制模仿显卡的功能,将显卡硬件结构抽象为一系列的数据结构原创 2012-05-23 20:23:03 · 9164 阅读 · 0 评论 -
s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(3)
s3c6410硬件WATCHDOG TIMER(看门狗定时器)的地址链接s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(1)的链接地址s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(2)的地址链接前面两篇一篇分析了看门狗定时器的驱动架构,另一篇分析了平台设备对应的probe函数,虽然对应的remove函数没原创 2012-05-22 15:46:42 · 3986 阅读 · 0 评论 -
s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(2)
s3c6410硬件WATCHDOG TIMER(看门狗定时器)的链接地址s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(1)的链接地址在上一篇中看了看门狗在linux中驱动实现的整体架构,作为混杂设备和平台设备存在。现在开始看平台设备对应的probe函数。static struct platform_driver s3c2410wdt_drive原创 2012-05-21 21:29:37 · 2790 阅读 · 0 评论 -
s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(1)
s3c6410硬件WATCHDOG TIMER(看门狗定时器)的链接地址如果对看门狗定时器的硬件不太熟悉,可以看上面这篇文章。还是先说下整体结构,又要说到大家很熟悉的平台设备了,同样看门狗定时器也是作为平台设备存在的,但与以前的不同的地方是,看门狗定时器是一种混杂设备,先介绍下混杂设备。1、混杂设备1.1、混杂设备并没有明确的定义。它的主设备号是10,不同的设备用次设备原创 2012-05-21 10:56:08 · 2860 阅读 · 0 评论 -
s3c6410的RTC在linux中的驱动(5)
s3c6410硬件RTC(实时时钟)的链接地址s3c6410的RTC在linux中的驱动(1)的链接地址s3c6410的RTC在linux中的驱动(2)的链接地址s3c6410的RTC在linux中的驱动(3)的链接地址s3c6410的RTC在linux中的驱动(4)的链接地址在上一篇中我们在中分析了RTC驱动的注册和注销,重点讲了平台设备驱动的原创 2012-05-20 19:48:11 · 2181 阅读 · 0 评论 -
s3c6410的RTC在linux中的驱动(4)
s3c6410硬件RTC(实时时钟)的链接地址s3c6410的RTC在linux中的驱动(1)的链接地址s3c6410的RTC在linux中的驱动(2)的链接地址s3c6410的RTC在linux中的驱动(3)的链接地址还记得这句话吗?rtc_dev_prepare终于完了,现在回到rtc_device_register函数中。美好的时光总是短暂的,又到原创 2012-05-20 10:12:09 · 2315 阅读 · 0 评论 -
s3c6410的RTC在linux中的驱动(3)
s3c6410硬件RTC(实时时钟)的地址链接s3c6410的RTC在linux中的驱动(1)的地址链接s3c6410的RTC在linux中的驱动(2)的地址链接上一篇说到了s3c_rtc_probe函数,但由于太长,而没有说完,这一篇接着上一篇的说。说完了这个函数就可以回到s3c_rtc_probe函数接着说了,下篇再聊。还记的这句话吗?现在接着聊: pr原创 2012-05-19 23:08:14 · 2146 阅读 · 0 评论 -
s3c6410的RTC在linux中的驱动(2)
s3c6410硬件RTC(实时时钟)的链接地址s3c6410的RTC在linux中的驱动(1)的链接地址上一篇主要是关于s3c6410的RTC在linux中驱动实现的整体结构框图,只有明白整体结构,我们才能进行自己的特定平台的RTC设备的驱动开发。这一篇我们就深入分析RTC设备驱动的具体实现。1、根据上一篇的分析,我们直接看Rtc-s3c.c (linux2.6原创 2012-05-19 20:09:22 · 2464 阅读 · 0 评论 -
s3c6410的RTC在linux中的驱动(1)
s3c6410硬件RTC(实时时钟)的链接地址如果对RTC硬件不熟悉的话,可以看上面这篇博客,讲述了硬件有关的内容。1、先从整体上做些分析,大致看了下linux2.6.28\drivers\rtc文件中的kconfig和Makefile文件,在Makefile文件中有如下内容:ifeq ($(CONFIG_RTC_DEBUG),y)EXTRA_CFLAGS += -原创 2012-05-19 17:29:54 · 3152 阅读 · 0 评论 -
Linux下s3c6410的GPIO操作(7)
没想到一个小小的GPIO操作函数,竟然写了七篇博客,这应该算是最后一篇了。1、s3c6410的GPIO操作函数主要涉及到三个文件,如下所示:arch/arm/plat-s3c64xx/gpiolib.clinux/arch/arm/plat-s3c/gpio.clinux/arch/arm/plat-s3c/gpio-config.c这三个文件中的很多函数都已经讲到原创 2012-05-14 16:38:36 · 2974 阅读 · 0 评论 -
Linux下s3c6410的GPIO操作(6)
1、在 Linux下s3c6410的GPIO操作(3) 这篇博客中少分析了一个函数,当时列出了源码,但没分析,现在补上。什么函数呢?如下所示:#ifdef CONFIG_S3C_GPIO_CFG_S3C64XX/** * s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config. * @ch原创 2012-05-14 14:47:36 · 2211 阅读 · 0 评论 -
Linux下s3c6410的GPIO操作(5)
1、我们曾经在前面看到这个函数,源码如下:__init void s3c_gpiolib_add(struct s3c_gpio_chip *chip){struct gpio_chip *gc = &chip->chip;int ret;BUG_ON(!chip->base);BUG_ON(!gc->label);BUG_ON(!gc->ngpio);原创 2012-05-13 17:02:00 · 2984 阅读 · 1 评论 -
Linux下s3c6410的GPIO操作(4)
1、前面几篇中,有一篇层调用过一个这样的函数,如下:static __init void s3c64xx_gpiolib_add_4bit(struct s3c_gpio_chip *chip){chip->chip.direction_input = s3c64xx_gpiolib_4bit_input;chip->chip.direction_output = s3c64xx_原创 2012-05-13 16:14:43 · 2280 阅读 · 0 评论 -
Linux下s3c6410的GPIO操作(3)
1、接着上一篇上一篇说到s3c64xx_gpiolib_add函数中的s3c_gpiolib_add(chips)这个函数了,并对这个函数进行了分析,但还没分析完,这篇接着分析,/* gpiochip_add() prints own failure message on error. */ret = gpiochip_add(gc);这个函数是上一篇中分析的重点if (ret原创 2012-05-13 15:40:31 · 2826 阅读 · 0 评论 -
Linux下s3c6410的GPIO操作(2)
1、还接着看上一篇的这个函数arch_initcall(s3c64xx_gpiolib_init);static __init int s3c64xx_gpiolib_init(void){s3c64xx_gpiolib_add(gpio_4bit, ARRAY_SIZE(gpio_4bit), s3c64xx_gpiolib_add_4bit);s3c64xx原创 2012-05-13 10:57:57 · 3355 阅读 · 0 评论 -
Linux下s3c6410的GPIO操作(1)
1、arch/arm/plat-s3c64xx/gpiolib.c文件中有如下:arch_initcall(s3c64xx_gpiolib_init);这个应该实在系统初始化时调用。static __init int s3c64xx_gpiolib_init(void){s3c64xx_gpiolib_add(gpio_4bit, ARRAY_SIZE(gpio_4bit)原创 2012-05-13 09:31:11 · 5998 阅读 · 0 评论 -
s3c6410的UART设备驱动(5)
s3c6410的UART设备驱动(1)的链接s3c6410的UART设备驱动(2)的链接s3c6410的UART设备驱动(3)的链接地址s3c6410的UART设备驱动(4)的链接地址上一篇中说到了这个函数,源码如下:static int s3c6400_serial_probe(struct platform_device *dev){ dbg("s3原创 2012-05-17 22:52:11 · 3468 阅读 · 3 评论 -
s3c6410的UART设备驱动(4)
s3c6410的UART设备驱动(1)的链接 s3c6410的UART设备驱动(2)的链接s3c6410的UART设备驱动(3)的链接 上两篇说了在模块初始化是调用uart_register_driver和uart_add_port注册UART驱动并添加端口,在模块卸载时调用uart_unregister_driver和u原创 2012-05-17 21:22:18 · 2813 阅读 · 0 评论 -
s3c6410的UART设备驱动(3)
s3c6410的UART设备驱动(1)的链接地址s3c6410的UART设备驱动(2)的链接地址上一篇说到了第二部分,但没说完,这一篇接着说第二部分,如下这部分:在模块初始化是调用uart_register_driver和uart_add_port注册UART驱动并添加端口,在模块卸载时调用uart_unregiste原创 2012-05-17 16:43:25 · 3299 阅读 · 0 评论 -
s3c6410的UART设备驱动(2)
s3c6410的UART设备驱动(1)的链接地址上一篇说到了第一部分,这一篇说第二部分,如下这部分:在模块初始化是调用uart_register_driver和uart_add_port注册UART驱动并添加端口,在模块卸载时调用uart_unregister_driver和uart_remove_one_port以注销UART驱动并移除端口。1、先说uart_register_d原创 2012-05-17 15:50:18 · 3409 阅读 · 0 评论 -
s3c6410的UART设备驱动(1)
1、这段话摘于《设备驱动开发详解》在使用串口核心层这个通用串口tty驱动层的接口后,一个串口驱动要完成的主要工作:(1)、定义uart_driver、uart_ops、uart_port等结构体的实例并在适当的地方根据具体硬件和驱动的情况初始化它们,当然具体设备的驱动可以将这些结构体在新定义的xxx_uart_driver、xxx_uart_ops、xxx_uart_port之原创 2012-05-11 20:13:09 · 5948 阅读 · 0 评论