linux驱动
文章平均质量分 74
chunzhilian0126
http://blog.csdn.net/chunzhilian0126
展开
-
Linux内核的Makefile和kconfig解读,如何在内核中添加自己的代码
一、概述 在内核编译中如何将各个目录树中的文件组织起来编译是一个很重要的问题,并且要根据用户配置来编译特有的内核。为了解决这个问题,内核使用两种文 件,Makefie和Kconfig。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关 的内核配置菜单,就是我们使用命令 make menuconfig(或者xconfig)后产生的转载 2016-11-24 09:18:26 · 2983 阅读 · 0 评论 -
1、Linux命令查漏(随时更新)
.tar.gz 格式解压为 tar -zxvf xx.tar.gz.tar.bz2 格式解压为 tar -jxvf xx.tar.bz2mkdir -p abc/bcd/file2 依次创建3个目录$find . -name'file*'$find / -name'vimrc'$fi原创 2016-12-25 14:28:53 · 234 阅读 · 0 评论 -
Linux 设备驱动--- 内核等待队列 --- wait_queue_head --- wait_event_interruptible --- 按键驱动程序优化
目录(?)[-]等待队列等待队列的 定义 和 初始化 wait_queue_head_t DECLARE_WAIT_QUEUE_HEAD 1定义等待队列 2初始化等待队列 3定义并初始化等待队列等待队列的 睡眠 wait_event_interruptible 有条件睡眠无条件睡眠等待队列中唤醒进程转载 2017-03-30 20:52:30 · 374 阅读 · 0 评论 -
做S3C2410的驱动比较重要的几个文件
转自——hantown原创做S3C2410的驱动,下面几个文件是必须去认真关注的:include/asm-arm/arch-s3c2410/irqs.h定义了中断相关的各种宏include/asm-arm/arch-s3c2410/regs-gpio.h定义了各种GPIOarch/arch/arm/plat-s3c24xx/gpio.c 定义了各种GPIO操作函数a转载 2017-03-31 20:08:54 · 639 阅读 · 0 评论 -
s3c2410_gpio_cfgpin等内核导出函数
1.S3C2410_GPB5是端口编号,定义在regs-gpio.h中,#define S3C2410_GPIO_BANKB (32*1)#define S3C2410_GPIONO(bank,offset) ((bank) + (offset))#define S3C2410_GPB5 S3C2410_GPIONO(S3C2410_GPIO_BANKB,转载 2017-03-31 20:16:09 · 1602 阅读 · 0 评论 -
原子操作、信号量、阻塞
一、原子操作 加入原子操作的目的就是多个应用程序同时调用驱动程序, 原子操作的特性是在自增、自减等操作过程中不会被打断,防止两个应用程序同时调用驱动程序情况的发生,其使用过程如下:static atomic_t canopen = ATOMIC_INIT(1); //定义原子变量并初始化为1然后在XXX_open( )函数中这样初始化。static int six转载 2017-04-17 16:53:11 · 347 阅读 · 0 评论 -
POLL机制的理解
1、poll存在于内核空间,对应于用户空间的select。 有很多用系统调用(用户空间)对应到驱动(内核空间)的函数:系统调用(用户空间) 驱动(内核空间)OpenOpenClose ReleaseReadReadWriteWri原创 2017-04-05 21:11:15 · 1924 阅读 · 0 评论 -
tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04
首先得要有制作好的uboot和Linux内核镜像zImage,先烧录到sd卡里,这个是已经做好了的工作。 一,ubuntu上先设置好nfs服务1.新建一个要挂载的文件liudijiang@ubuntu:~/share$ pwd/home/liudijiang/share我已经建好了,这是我的路径2.安装nfs服务liudijiang@转载 2017-05-12 16:07:52 · 600 阅读 · 0 评论 -
Linux串口(serial、uart)驱动程序设计
一、核心数据结构串口驱动有3个核心数据结构,它们都定义在1、uart_driveruart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver)。struct uart_driver { struct module *owner;转载 2017-05-23 20:15:30 · 368 阅读 · 0 评论 -
使用 Linux 的 strace 命令跟踪/调试程序的常用选项
在调试的时候,strace能帮助你追踪到一个程序所执行的系统调用。当你想知道程序和操作系统如何交互的时候,这是极其方便的,比如你想知道执行了哪些系统调用,并且以何种顺序执行。这个简单而又强大的工具几乎在所有的Linux操作系统上可用,并且可被用来调试大量的程序。命令用法让我们看看strace命令如何追踪一个程序的执行情况。最简单的形式,strace后面可转载 2017-05-25 21:15:15 · 452 阅读 · 0 评论 -
SD 分区作为跟文件系统 启动Linux
使用SD卡作为根文件系统启动分区1、格式化SD卡,保证一个fat分区,可以使用windows系统copy东西,一个Linux分区,在第一个分区前保证有些空闲的扇区来烧写bootload和kernel 当然也可以按照自己的意愿分配,我的分区如下: Device Boot Start End Blocks Id System转载 2017-04-27 14:43:30 · 290 阅读 · 0 评论 -
busybox的init详解
5.5.3 busybox的init 除了基本的命令之外,BusyBox还支持init功能,如同其它的init一样,busybox的init也是完成系统的初始化工作,关机前的工作等等,我们知道在Linux的内核被载入之后,机器就把控制权转交给内核,linux的内核启动之后,做了一些工作,然后找到根文件系统里面的init程序,并执行它,BusyBox的init进程会依次进行以下工作:(转载 2017-04-27 16:23:07 · 489 阅读 · 0 评论 -
8.1 usb_register 与 usb_regieter_dev
1、usb设备与驱动程序的匹配过程 a.先安装驱动,后插入设备 这种情况下,usb host controller完成对设备的枚举过程后,将设备的信息封装到一个usb_interface结构体中。usb core根据该结构体提供的设备信息(Vendor_id & Product_id)去遍历所有的驱动程序,找到支持该设备的驱动,并调用该驱动中的probe函数。最终将该转载 2016-12-29 21:12:31 · 734 阅读 · 0 评论 -
1.1问题及警告解决办法(随时更新)
1、在编译u-boot时,出现了这样的警告warning: function declaration isn’t a prototype [-Wstrict-prototypes]解决办法:函数没有参数,给函数参数位置加上void2、NFS mount failed, reason given by server: Permission denied解决步骤:原创 2016-12-25 14:57:15 · 403 阅读 · 0 评论 -
字符设备驱动理解
设备驱动的含义 C库中通过open/read/write/seek等来操作文件,所谓字符设备驱动,简单来说就是实现这几个函数的具体内容,linux能把设备抽象为文件,用户调用open/read/write/seek对抽象的文件进行操作就可以操作实际硬件设备(或抽象的设备)。所以字符设备驱动的重点,在于编写内核空间的open/read/write/seek等函数。 可见,转载 2016-12-25 15:15:27 · 329 阅读 · 0 评论 -
最全面的linux信号量解析
一、信号量的概念:信号量用来保护共享资源,让资源在一个时刻只能被一个进程(或线程)拥有。信号量的值为正,代表空闲状态,测试的线程可以锁定并且使用它。若值为0,代表被占用,测试的线程进入睡眠队列,等待被唤醒。二、信号量的分类:linux提供了两种信号量: 1.内核信号量:由内核控制路径使用。 2.用户态进程使用的信号量,这种信号量又分为POSIX信号量和SYS转载 2016-11-23 18:11:16 · 245 阅读 · 0 评论 -
韦东山学习笔记
韦东山书读后感1. 对异常概念的理解 异常就是可以打断CPU正常运行的事件,比如,外部中断、未定义的指令、软中断等。当这些异常发生时,就打断CPU的正常运行,跳到相应的异常处理程序去处理这些异常要求的一些操作。2. Linux内核异常处理框架基于Linux-2.6.32,内核启动时early_trap_init(void)将异常向量表拷贝到0xffff000转载 2016-11-16 20:34:07 · 1249 阅读 · 0 评论 -
2、构建根文件系统步骤
1、把busybox压缩包拷贝到哦工作目录,如: my_work2、解压:tar -jxvf busybox.tar.bz23、进入解压的文件夹:gedit Makefile 找到CROSS_COMPILE ?= arm-linux- 是否存在,确定交叉编译工具是否存在,不存在的进行补全4、make menuconfig 进行配置,记得打开table命令补全功能,原创 2016-12-25 14:29:44 · 267 阅读 · 0 评论 -
2.1 完善最小根文件系统
1、mkdir proc mount -t proc none /proc (挂载内核虚拟文件系统 /proc) ---手工挂载2、自动挂载$ gedit etc/inittab 加入: ::sysinit:/etc/init.d/rcS$ mkdir etc/init.d 创建目录init.d$ ge原创 2016-12-25 14:32:12 · 298 阅读 · 0 评论 -
3、制作映像文件yaffs2
1、解压 yaffs_source_util_larger_small_page_nand.tar.bz22、进入yaffs2的utils目录:cd Development_util_ok/yaffs2/utils,执行make进行编译,生成如下: 3、将mkyaffs2image 拷贝到虚拟机系统的 /usr/local/bin文件夹中,并且增加可执行权限原创 2016-12-25 14:34:21 · 318 阅读 · 0 评论 -
4、网络根文件系统(NFS)
一、准备工作:1、ifonfig 查看ip,如果没有信息输出,则ifconfig eth0 up启动网卡,设置开发板的ip和电脑ip在同一个网段,比如我设置的是:ifonfig eth0 171.16.1.111,ping看看电脑,开发板和ubuntu是否互通,ping通才行二、间接启动NFS(从flash启动)1、首先,从FLASH上启动根文件系统,然后再用命令挂机NFS挂接原创 2016-12-25 14:36:42 · 390 阅读 · 0 评论 -
5、字符设备驱动LEDS
static int first_drv_open(struct inode *inode, struct file *file){ printk("first_drv_open\n"); return 0;}static int first_drv_read(struct file *filp, char __user原创 2016-12-25 14:38:41 · 200 阅读 · 0 评论 -
5.1 改进字符设备驱动LEDS
1、实现自动创建主设备号,和自动创建设备节点(不再手工操作 mknod /dev/zxl c 100 0 ) c代表字符设备,主设备号100,次设备号0,设备名xxxstatic struct class *firstdev_class;static struct class_device*first_class_devs;int major;原创 2016-12-25 14:49:15 · 204 阅读 · 0 评论 -
开发板挂载NFS
1.虚拟机安装配置NFS1)#sudo apt-get install nfs-kernel-server nfs-common portmap #sudo dpkg-reconfigure portmap 选择否安装方式很多,一般不会有问题,注意不要将portmap绑定在loopback地址上。安装完以后查看cat /etc/default/portmaps,确转载 2016-12-25 14:53:16 · 411 阅读 · 0 评论 -
6、输入子系统驱动编写
static struct input_dev *buttons_dev; //定义一个指针buttons_dev,指向input_devstatic int buttons_init(){ /*1、分配一个input_dev结构体*/buttons_dev = input_allocate_device(); /*2、设置*原创 2016-12-25 14:51:46 · 291 阅读 · 0 评论 -
7、某项目RCS内容解析
[root@(none)init.d]#cat rcS#后面一般为注释的内容#!/bin/sh此句含义:#! /bin/sh 是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面跟的是解释此脚本的shell的路径。如果脚本中没有声明,则脚本将在用户默认的shell中执行。用户默认的shell环境是在/etc/passwd中定义:比如pass原创 2016-12-25 15:12:35 · 568 阅读 · 0 评论 -
Linux USB 鼠标驱动程序详解
USB 总线引出两个重要的链表!一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)。 USB 设备驱动程序(usb device driver)和 USB 驱动程转载 2017-05-31 21:53:26 · 406 阅读 · 0 评论