
Linux内核
文章平均质量分 75
嵌入式攻城狮小白
开始摆烂
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
DMA基本概念及linux2440下DMA驱动程序编写与测试
div id="article_content" class="article_content csdn-tracking-statistics tracking-click" data-mod="popu_519" data-dsm="post" style="height: 913px; overflow: hidden;">p>转自:a href="http://blog.techbul转载 2018-01-14 16:35:36 · 437 阅读 · 0 评论 -
Linux中__set_bit函数分析
/** * __set_bit - 在内存中设置一位 * @nr: 要设置的那一位 * @addr: 开始计数的地址 * * 与set_bit()不同,此函数是非原子的,可以重新排序。如果同时调用同一个内存区域,则可能只有一个操作成功。 */static inline void __set_bit(int nr, volatile unsigned long *addr){ u...原创 2019-01-11 20:38:01 · 5481 阅读 · 0 评论 -
最近看Omapl138UBOOT主Makefile的一些整理
如下:VERSION = 2012PATCHLEVEL = 04SUBLEVEL = 01EXTRAVERSION =ifneq “$(SUBLEVEL)” “”U_BOOT_VERSION =$ (VERSION).$ (PATCHLEVEL).$ (SUBLEVEL)$(EXTRAVERSION)elseU_BOOT_VERSION =$ (VERSION).$ (PATC...原创 2018-10-27 21:25:06 · 315 阅读 · 0 评论 -
RS232 RS485 串口 电平标准
<div class="htmledit_views"><p><span style="color:rgb(51,51,51);font-family:arial, tahoma, 'Microsoft Yahei', '宋体', sans-serif;font-size:34px;line-height:39px;"&am转载 2018-05-19 15:57:39 · 4100 阅读 · 0 评论 -
omapl138在中断基础上实现异步通知的按键驱动(针对开发板上的SW8和SW9按键)
目标:按下按键时,驱动程序通知应用程序,而不是应用程序自己查询步骤:1.应用程序注册信号处理函数;2.谁发?驱动程序发;3.发给谁?应用程序要告诉驱动它的pid号;4.怎么发?驱动程序调用某个函数,kill_fasync函数。驱动程序:#include <linux/module.h>#include <linux/kernel.h>#include &l...原创 2019-03-23 20:14:17 · 274 阅读 · 0 评论 -
Omapl138实现中断方式的按键驱动
学习了韦东山一期视频,关于按键驱动部分,他用了查询的方式,中断的方式,poll机制,和异步通知的方式来做,并渗透了同步互斥,阻塞的知识。其中,我对中断的方式和异步通知很感兴趣,这两种方式对于推进自己所做的项目有很大的指导意义。但是课程中使用的开发板是JZ 2440,并且内核版本为2.6,所以需根据手头的omapl138开发板和Linux3.3内核做一些改进。本文分为两部分,第一部分总结一下异常处...原创 2019-03-23 19:29:16 · 580 阅读 · 0 评论 -
Omapl138双核通信中断及共享内存搬运的代码实现分析(一)
关键部分代码如下所示: // 把sin_buffer这个数组的值写到共享内存上 SRBuffer *buffer = SR_buffer_new(SHARED_BUFFER_ADDR, SHARED_BUFFER_SIZE);(1) char *data = (char *)SR_buffer_data(buffer); memcpy(data, sin_buffer, S...原创 2019-01-11 16:46:11 · 1623 阅读 · 0 评论 -
pci_alloc_consistent配合mmap实现DMA功能
有这种需求的同行自然明白这2个为什么需要配合起来用。简单说说,我的需求是dma位于pci设备侧,pci主的cpu上应用程序直接mmap获取dma发来的数据。猜测显卡的dma一般位于pci主,所以我在内核里没有找到pci_alloc_consistent 配合mmap的例子。这个代码在loongson 3A这个极品芯片上都能...转载 2018-11-21 18:04:09 · 1495 阅读 · 1 评论 -
S3c6410linux下DMA驱动
&a转载 2018-11-18 11:22:17 · 253 阅读 · 0 评论 -
Linux总线驱动之DMA传输
&a转载 2018-11-17 21:56:15 · 344 阅读 · 0 评论 -
通用设备的动态DMA
&a转载 2018-11-17 21:53:00 · 921 阅读 · 0 评论 -
Linux下DMA驱动框架
&a转载 2018-11-17 21:48:50 · 635 阅读 · 0 评论 -
Linux下DMA驱动框架
&a转载 2018-11-17 21:48:50 · 928 阅读 · 0 评论 -
linux3.3内核驱动初始化时具体调用的函数
system.map描述了代码具体的调用过程,对照这个过程,通过source-insight软件搜索到相应的初始化函数,整理如下:c0599ba4 t__initcall_init_static_idmapearlyc0599ba4 T __initcall_startc0599ba4 T __setup_endc0599ba8 t __initcall_spawn_ksoft...原创 2018-11-10 23:26:20 · 539 阅读 · 0 评论 -
linux内核启动中的初始化
&a转载 2018-11-10 08:45:55 · 527 阅读 · 0 评论 -
linux设备驱动加载的先后顺序
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;转载 2018-11-10 08:44:53 · 674 阅读 · 0 评论 -
linux3.5下I2C驱动
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;转载 2018-11-10 08:40:41 · 334 阅读 · 0 评论 -
initcall的执行
&a转载 2018-11-10 08:38:02 · 303 阅读 · 0 评论 -
基于Omapl138开发板linux3.3系统分析do_initcall()函数
参考了网上的很多内容,网上的分析基本上是基于linux2.6或者3.1的内核,对于这个函数而言,其实大同小异,但是几乎没有哪篇文章能一次性把我想要了解的东西全部呈现,所以自己尝试整理如下:do_initcalls()-&amp;gt;static void __init do_initcalls(void){ initcall_t *fn; for (fn = __ea...原创 2018-11-09 22:59:43 · 572 阅读 · 0 评论 -
linux内核链表list_entry()函数的分析
这个函数可以通过list的指针域推算出它的节点所指向的值,具体代码实现如下:/** * list_entry - get the struct for this entry * @ptr: the &amp;amp;struct list_head pointer. * @type: the type of the struct this is embedded in. * @member: t...原创 2018-10-28 23:13:31 · 861 阅读 · 0 评论 -
Linux内核编译详解
学习了网上的一些资料,自己试着摸索了一下,整理出此文。由于在下水平相当有限,不当之处,还望大家批评指正^_^重要的参考资料有:http://raspberrypi.stackexchange.com/questions/192/how-do-i-cross-compile-the-kernel-on-a-ubuntu-hosthttp://blog.youkuaiyun.com/xdw19转载 2018-01-29 22:49:40 · 329 阅读 · 0 评论 -
Linux内核模块(驱动)编译详解
本文主要说说如何编译自己开发的内核模块。由于驱动通常也被编译成内核模块,因此文章的内容也适用于驱动的编译。由于在下能力相当有限,有不当之处,还望大家批评指正^_^一、准备工作准备工作如何做,这里就不详说了。a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、make、ncur转载 2018-01-29 22:48:26 · 504 阅读 · 0 评论 -
EDMA3驱动的API
EDMA3驱动的API:(一):static void __init map_dmach_param(unsigned ctlr)//map_dmach_param - Maps channel number to param entry number——映射通道号到参数的通道号,也就是说,使用通道参数映射寄存器,可以将通道的参数配置映射到任何一个通道,callers负责将通道的映射逻辑包含特原创 2018-01-26 23:02:47 · 1650 阅读 · 0 评论 -
针对omapl138平台的EDMA3驱动
/* * EDMA3 support for DaVinci * * Copyright (C) 2006-2009 Texas Instruments. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Pub转载 2018-01-24 16:42:34 · 578 阅读 · 0 评论 -
DM8168 DM8148 EDMA3 linux驱动程序,C实现
驱动拟定完成了以下几个功能:1、DMA一致性内存的申请,返回给用户使用;2、DMA一致性内存的释放;3、DMA一致性内存的映射(mmap);4、给定源实地址和目的实地址,完成A-sync或AB-sync两种模式的DMA内存搬运,TC0~TC3可选,模式可选;源码下载地址http://download.youkuaiyun.com/detail/mantis_1984/73640431、写了转载 2018-01-23 11:13:51 · 354 阅读 · 0 评论 -
Linux启动过程分析(十一)-i2c_register_board_info(1, da850_evm_i2c_devices, ARRAY_SIZE(da850_evm_i2c_devices))
i2c_register_board_info(1, da850_evm_i2c_devices,ARRAY_SIZE(da850_evm_i2c_devices));/** * i2c_register_board_info - statically declare I2C devices * @busnum: identifies the bus to which these de...原创 2018-12-04 09:38:49 · 829 阅读 · 0 评论 -
Linux启动过程分析(十一)--PLL各个外设时钟频率的设置
Board-da850-sdi.c (arch\arm\mach-davinci) 中的:MACHINE_START(DAVINCI_DA850_SDI, &amp;amp;amp;amp;amp;quot;DA850 SDI Development Board&amp;amp;amp;amp;amp;quot;) .atag_offset = 0x100, .map_io = da850_evm_map_io, .init_irq = cp_intc_in原创 2018-12-27 16:01:30 · 2646 阅读 · 0 评论 -
Linux 内存映射函数 mmap()函数详解
mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。头文件 &lt;sys/mman.h&gt;函数原型void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);int mu...转载 2019-01-11 16:48:18 · 322 阅读 · 0 评论 -
Linux内核module_param的使用
1.定义模块参数的方法:module_param(name, type, perm);其中,name:表示参数的名字;type:表示参数的类型;perm:表示参数的访问权限;数组类型模块参数的定义:用逗号间隔的列表提供的值;声明一个数组参数:module_param_array(name, type, num, perm);其中,name:表示数组的名字;type:表示参数...转载 2019-03-10 20:47:19 · 262 阅读 · 0 评论 -
linux下基于vc088x开发板分析CLK模型(时钟管理)
Linux clk 模型 Linux clk模型采用面向对象的思想来设计实现的。在porting层创建一个一个的clk节点对象,然后将所有的clk节点对象连成一个list。当驱动层需要设置时钟的时候,通过porting层与驱动层直接的api函数进行操作。首先通过clk_get函数,根据clk节点的名字,获取clk节点。然...转载 2018-11-30 17:54:43 · 672 阅读 · 0 评论 -
linux启动初始化步骤(九)----电源管理相关函数
Linux电源管理是一个比较庞大的子系统,涉及到供电(power supply)、充电(Charger)、时钟(Clock)、频率(Frequency)、电压(Voltage)、睡眠/唤醒(Suspend/Resume)等方方面面。Power Supply,是一个供用户空间程序监控系统的供电状态(电池供电,USB供电,AC供电等等)的class.通俗的讲,它是一个Battery&amp;amp;amp;amp;amp;amp;Char...原创 2018-11-29 10:47:23 · 640 阅读 · 0 评论 -
Linux启动过程初始化(十二)----watchdog初始化
参考博文:https://blog.youkuaiyun.com/huashibuliao/article/details/78281656首先了解一下Linux系统下的watchdog的用法Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。内核 watchdog 模块通过 /dev/watchdo...原创 2018-12-05 23:58:00 · 1864 阅读 · 0 评论 -
Linux启动过程分析---davinci_cfg_reg_list(da850_i2c0_pins)
ret = davinci_cfg_reg_list(da850_i2c0_pins)-&amp;amp;gt;int __init_or_module davinci_cfg_reg_list(const short pins[]){ int i, error = -EINVAL; if (pins) for (i = 0; pins[i] &amp;amp;gt;= 0; i++) { error =...原创 2018-12-02 00:17:28 · 620 阅读 · 0 评论 -
Linux内核启动过程分析(十)-----RTC驱动分析
参考https://blog.youkuaiyun.com/xuao20060793/article/details/46433263这篇博文RTC驱动分析:Class.c (drivers\rtc):subsys_initcall(rtc_init);static int __init rtc_init(void){ rtc_class = class_create(THIS_MODULE, "r...原创 2018-11-29 20:56:33 · 739 阅读 · 0 评论 -
Linux启动过程分析(十一)---I2c-gpio_init
I2c-gpio.c (drivers\i2c\busses):subsys_initcall(i2c_gpio_init);static int __init i2c_gpio_init(void){ int ret; ret = platform_driver_register(&amp;i2c_gpio_driver); if (ret) printk(KERN_ERR "...原创 2018-12-04 14:13:34 · 331 阅读 · 0 评论 -
linux内核初始化步骤(十)-----时间管理子系统初始化
时间管理子系统:Jiffies.c (kernel\time):core_initcall(init_jiffies_clocksource)static int __init init_jiffies_clocksource(void){ return clocksource_register(&amp;amp;amp;amp;amp;clocksource_jiffies);}Class.c (drivers\...原创 2018-11-29 17:23:07 · 1335 阅读 · 0 评论 -
Linux启动过程分析(十一)----i2c_dev_init
I2c-dev.c (drivers\i2c):module_init(i2c_dev_init);/* ------------------------------------------------------------------------- *//* * module load/unload record keeping */static int __init i2c_...原创 2018-12-02 12:16:19 · 791 阅读 · 0 评论 -
linux启动过程分析(十一)---davinci_i2c_init_driver
I2c-davinci.c (drivers\i2c\busses):subsys_initcall(davinci_i2c_init_driver);/* * This function configures I2C and brings I2C out of reset. * This function is called during I2C init function. This ...原创 2018-12-02 12:14:25 · 311 阅读 · 0 评论 -
Linux启动过程分析(十一)-----i2c_init
I2c-core.c (drivers\i2c):postcore_initcall(i2c_init);static int __init i2c_init(void){ int retval; retval = bus_register(&amp;amp;amp;amp;i2c_bus_type); if (retval) return retval;#ifdef CONFIG_I2C_COMPA...原创 2018-12-02 12:10:49 · 1055 阅读 · 0 评论 -
Linux启动过程分析(十一)---da8xx_register_i2c(0, &da850_evm_i2c_pdata)
ret = da8xx_register_i2c(0, &amp;amp;amp;amp;amp;amp;da850_evm_i2c_pdata)-&amp;amp;amp;amp;amp;gt;int __init da8xx_register_i2c(int instance, struct davinci_i2c_platform_data *pdata){ struct platform_device *pdev; if (insta原创 2018-12-02 12:07:04 · 364 阅读 · 0 评论