<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[勇往直前的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/toptp2017</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; toptp2017]]></copyright><item><title><![CDATA[Linux Input子系统]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/108815524</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/108815524</guid><author>toptp2017</author><pubDate>Sat, 26 Sep 2020 18:53:23 +0800</pubDate><description><![CDATA[一 输入子系统分层

1、输入子系统事件处理层（EventHandler）


.id_table　　　一个存放该handler所支持的设备id的表（其实内部存放的是EV_xxx事件                  ,用于判断device是否支持该事件）
.fops　　　　　该handler的file_operation
.connect　　　 连接该handler跟所支持device的函数
.disconnect　　断开该连接
.event　　　　 事件处理函数，让device调用
.h_list　　 ]]></description><category></category></item><item><title><![CDATA[Linux 设备树dts介绍]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/108815232</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/108815232</guid><author>toptp2017</author><pubDate>Sat, 26 Sep 2020 18:30:02 +0800</pubDate><description><![CDATA[一 概述﻿﻿﻿

  在写驱动的过程中，有很大一部分工作是在对设备信息进行管理，随着芯片种类的增加，这种管理工作变得越来越复杂。目前写驱动主要有三种方式：1、跟写单片机裸机驱动一样，直接把驱动和硬件信息写在一起。这种方式的优点是程序简单，缺点很明显，就是每当硬件信息改动的时候，比如简单的更换一下IO引脚，都需要去修改源文件的大部分内容，因此扩展性不强。2、使用总线-设备-驱动模型。这种模式使用上下分层，左右分离的思想，把设备和驱动分离，然后挂在一根总线上，使用一定的机制进行匹配。这种方式相对与第一种，...]]></description><category></category></item><item><title><![CDATA[Linux链表操作]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/108815056</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/108815056</guid><author>toptp2017</author><pubDate>Sat, 26 Sep 2020 18:08:45 +0800</pubDate><description><![CDATA[Linux里面链表使用非常频繁，下面来看看Linux是怎么玩链表的。下面代码均取自/include/linux/list.h

一 Linux链表定义


struct list_head {
	struct list_head *next, *prev;
};

Linux对链表抽象了一个最小的单位list_head,它只有两个成员：next指向后一个节点，pre指向前一个节点。

二 链表操作

1. 链表初始化

把pre和next都指向自身！判断链表是否为空即判断xxx-&gt;next = xx.]]></description><category></category></item><item><title><![CDATA[浅谈内核的Makefile、Kconfig和.config文件]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80764899</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80764899</guid><author>toptp2017</author><pubDate>Thu, 21 Jun 2018 19:17:08 +0800</pubDate><description><![CDATA[本文转自百问科技公众号!Linux内核源码文件繁多，搞不清Makefile、Kconfig、.config间的关系，不了解内核编译体系，编译修改内核有问题无从下手，自己写的驱动不知道怎么编进内核，不知道怎么配置内核，这些问题都和Makefile、Kconfig、.config有关，下面简单谈谈Makefile、Kconfig和.config。希望对你有启发。 三者的作用：简单来说就是去饭店点菜：K...]]></description><category></category></item><item><title><![CDATA[I2S总线]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80739161</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80739161</guid><author>toptp2017</author><pubDate>Tue, 19 Jun 2018 21:09:42 +0800</pubDate><description><![CDATA[转自：https://blog.youkuaiyun.com/greston/article/details/8076584引言I2S（InterIC Sound Bus）是飞利浦公司针对数字音频设备之间的音频数据传输而制定的一种总线标准，采用沿独立的导线传输时钟与数据信号的设计，通过分离数据和时钟信号，避免了时差诱发的失真。I2S总线简单有效，可以有效提升输出数据的质量，在各种嵌入式音频系统中有广泛应用。但...]]></description><category></category></item><item><title><![CDATA[LINUX下getopt函数的简单使用]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80630153</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80630153</guid><author>toptp2017</author><pubDate>Sat, 09 Jun 2018 09:21:45 +0800</pubDate><description><![CDATA[英雄不问出处，getopt()函数的出处就是unistd.h头文件（哈哈）,写代码的时候千万不要忘记把他老人家include上。 再来看一下这家伙的原型（不是六耳猕猴）：int getopt(int argc,char * const argv[ ],const char * optstring);前两个参数大家不会陌生，没错，就是老大main函数的两个参数！老大传进来的参数自然要有人接着！第三个...]]></description><category></category></item><item><title><![CDATA[利用__attribute__((section()))构建初始化函数表与Linux内核init的实现]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80559672</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80559672</guid><author>toptp2017</author><pubDate>Sun, 03 Jun 2018 20:11:20 +0800</pubDate><description><![CDATA[问题导入传统的应用编写时，每添加一个模块，都需要在main中添加新模块的初始化使用__attribute__((section()))构建初始化函数表后，由模块告知main：“我要初始化“，添加新模块再也不需要在main代码中显式调用模块初始化接口。以此实现main与模块之间的隔离，main不再关心有什么模块，模块的删减也不需要修改main。那么，如何实现这个功能呢？如何实现DECLARE_INI...]]></description><category></category></item><item><title><![CDATA[深入分析linux内核链表]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80556323</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80556323</guid><author>toptp2017</author><pubDate>Sun, 03 Jun 2018 14:14:36 +0800</pubDate><description><![CDATA[一、	链表数据结构简介链表是一种常用的组织有序数据的数据结构，它通过指针将一系列数据节点连接成一条数据链，是线性表的一种重要实现方式。相对于数组，链表具有更好的动态性，建立链表时无需预先知道数据总量，可以随机分配空间，可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域：数据域和指针域，数据域用于存储数据，指针域用于建立与...]]></description><category></category></item><item><title><![CDATA[USB设备开发---- usb描述符概述]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80469181</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80469181</guid><author>toptp2017</author><pubDate>Sun, 27 May 2018 14:31:28 +0800</pubDate><description><![CDATA[转自：http://blog.youkuaiyun.com/saloon_yuan/article/details/7837492说到USB设备，不得不提到各种描述符（descriptors), 一般来说，描述符有如下几种：    1：设备描述符（Device Descriptors)    2：配置描述符（Configuration Descriptors)    2：接口描述符（Interface Des...]]></description><category></category></item><item><title><![CDATA[自旋锁和互斥锁]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80424003</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80424003</guid><author>toptp2017</author><pubDate>Wed, 23 May 2018 18:19:10 +0800</pubDate><description><![CDATA[POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段，其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。Pthreads提供了多种锁机制：(1...]]></description><category></category></item><item><title><![CDATA[ubuntu 16.04 下编译x264，ffmpeg和openCV]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80297871</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80297871</guid><author>toptp2017</author><pubDate>Sun, 13 May 2018 11:36:34 +0800</pubDate><description><![CDATA[这几天在编译这三个东西的时候，遇到了很多问题，现把安装过程总结如下，希望帮到大家！1.安装x264和ffmpeg的依赖sudo apt-get updatesudo apt-get install build-essential checkinstall gitcmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb...]]></description><category></category></item><item><title><![CDATA[cmake在ubuntu16.04下安装，简单使用及基本知识介绍]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/80246963</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/80246963</guid><author>toptp2017</author><pubDate>Tue, 08 May 2018 22:29:34 +0800</pubDate><description><![CDATA[本文整理自csdn博客一 安装（环境ubuntu16.04）1. 文件下载解压：wget https://cmake.org/files/v3.9/cmake-3.9.1-Linux-x86_64.tar.gz 解压：tar zxvfcmake-3.9.1-Linux-x86_64.tar.gz2. 创建软链接注: 文件路径是可以指定的, 一般选择在/opt 或 /usr 路径下, 这里选择/op...]]></description><category></category></item><item><title><![CDATA[C语言中const修饰的常变量可以修改吗]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/79754434</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/79754434</guid><author>toptp2017</author><pubDate>Fri, 30 Mar 2018 11:19:33 +0800</pubDate><description><![CDATA[const关键字是C语言中很重要的一个关键字，被它”修饰“的变量我们称为常变量。那这个常变量的值到底能不能修改呢？我们先来看一下变量名与变量之间的关系：变量：用来标识(identify)一块内存区域，这块区域的值一般是可以更改的，这就是它“变”的由来。变量名：是一个标识符(identifier)，用来指代一块内存区域，即变量，使用变量使我们操作内存以区域(area)，以块(block)为单位，提高...]]></description><category></category></item><item><title><![CDATA[内存、ram、 rom、 norflash，nandflash详细区别]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/79686789</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/79686789</guid><author>toptp2017</author><pubDate>Sun, 25 Mar 2018 15:09:26 +0800</pubDate><description><![CDATA[1.什么是内存     什么是内存呢？在计算机的组成结构中，有一个很重要的部分，就是存储器。存储器是用来存储程序和数据的部件，对于计算机来说，有了存储器，才有记忆功能，才能保证正常工作。存储器的种类很多，按其用途可分为主存储器和辅助存储器，主存储器又称内存储器（简称内存），辅助存储器又称外存储器（简称外存）。外存通常是磁性介质或光盘，像硬盘，软盘，磁带，CD等，能长期保存信息，并且不依赖于电来保存...]]></description><category></category></item><item><title><![CDATA[进程、线程 及其在 linux中的实现]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/79544728</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/79544728</guid><author>toptp2017</author><pubDate>Tue, 13 Mar 2018 18:54:09 +0800</pubDate><description><![CDATA[一  进程，线程是怎么来的？抛开技术细节，从使用角度来讲：1.     在单核计算机里，有一个资源是无法被多个程序并行使用的： cpuCpu，承担计算任务，单个cpu一次只能运行一个任务。没有操作系统的情况下，一个程序一直独占着全部cpu若有2个任务来共享一cpu，需要程序员安排程序运行计划，使得某时刻cpu被A程序独占，下一时刻cpu被程序B独占这种安排计划就是OS核心组件，被命名为‘sched...]]></description><category></category></item><item><title><![CDATA[C++中虚函数工作原理和(虚)继承类的内存占用大小计算]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/79478062</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/79478062</guid><author>toptp2017</author><pubDate>Wed, 07 Mar 2018 22:38:50 +0800</pubDate><description><![CDATA[转载请标明出处，原文地址：http://blog.youkuaiyun.com/hackbuteer1/article/details/7883531一、虚函数的工作原理      虚函数的实现要求对象携带额外的信息，这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下，这一信息具有一种被称为 vptr（virtual table pointer，虚函数表指针）的指针的形式。vptr 指向一个被称为...]]></description><category></category></item><item><title><![CDATA[C++多态的实现原理]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/79464135</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/79464135</guid><author>toptp2017</author><pubDate>Tue, 06 Mar 2018 21:33:15 +0800</pubDate><description><![CDATA[C++多态的实现原理1. 用virtual关键字申明的函数叫做虚函数，虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的，虚表指针是和对象对应的。3. 多态性是一个接口多种实现，是面向对象的核心。分为类的多态性和函数的多态性。4. 多态用虚函数来实现，结合动态绑定。5. 纯虚函数是虚函数再加上= 0。6. 抽象类是指包...]]></description><category></category></item><item><title><![CDATA[如何手工挂载NFS到开发板]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/79453638</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/79453638</guid><author>toptp2017</author><pubDate>Tue, 06 Mar 2018 10:05:48 +0800</pubDate><description><![CDATA[我们在练习驱动的时候，常常需要开发板共享服务器的文件，今天就来谈谈如何挂载NFS!一  NFS介绍NFS：Network File System（网络文件系统），NFS只是一种文件系统，本身并没有传输功能，是基于RPC协议实现的，为C/S架构。也就是说，NFS也只是文件系统而已，与jffs2,yaffs,ext4等是一类东西。但是NFS的特殊之处在于，它可以通过网络来挂载，而不用烧写到设备上。这就...]]></description><category></category></item><item><title><![CDATA[浅谈ARM存储系统之cache]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/79429974</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/79429974</guid><author>toptp2017</author><pubDate>Sat, 03 Mar 2018 15:12:11 +0800</pubDate><description><![CDATA[通常来讲，ARM处理器的主频为几十M甚至上百M，而一般的SDRAM的存储周期是很慢的，相对于CPU来说，这时，如果我们把程序和数据都存储在SDRAM中，那么CPU在读取指令和数据的时候，就会受到SDRAM速度的限制，大大地制约了整个系统的性能。那么有没有什么改善的办法呢？下面我们就来谈一下ARM的高速缓冲存储器（cache）。一，Cache的概念及工作原理1.1  概念              ...]]></description><category></category></item><item><title><![CDATA[[C语言]联合体和枚举]]></title><link>https://blog.youkuaiyun.com/toptp2017/article/details/79428347</link><guid>https://blog.youkuaiyun.com/toptp2017/article/details/79428347</guid><author>toptp2017</author><pubDate>Sat, 03 Mar 2018 09:58:32 +0800</pubDate><description><![CDATA[Motivation我这人有一个最大的毛病，学什么东西都总喜欢学个皮毛。记得大一那会儿我们学C，教材上有几个内容不考，枚举和共用体正是其中之一，我就想当然地觉得没用，也没看。直到前几天在看深度学习框架caffe的时候才回过神来，原来任何东西都是有用的啊！这篇文章就希望能够对枚举类型enum和共用体union做一个基本的介绍。一、联合(union)1.1 union是什么union，又称联合体或是共...]]></description><category></category></item></channel></rss>