![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
arm-Linux学习
文章平均质量分 85
雷古拉斯
专注近场通信
展开
-
Linux设备驱动开发——I2C总线原理与时序
一、I2C总线概述 I2C总线有两根线:SCL有一定的时钟周期控制信号、SDA数据线 I2C属于边沿触发类总线:即当SCL处于上升沿时,接收器接收信号 总线空闲状态为:SDA和SCL都处于高电平状态 I2C只要主设备才能操作SCL时钟控制线,从设备应答信号为拉低SDA数据线电平。二、I2C传输过程理解 规定:SCL处于高电平期间,SDA是不可以变化的;因为,SCL...原创 2019-06-20 08:20:18 · 524 阅读 · 0 评论 -
《Linux内核编程》第十五章:Linux设备模型
一、底层数据结构kset及kobjectkernel2.6.35.11/include/linux/kobject.hstruct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *kset; struct kobj_type *原创 2013-05-08 17:42:58 · 1004 阅读 · 0 评论 -
Linux uvc驱动分析
一、ioctl调用流程1.common/drivers/media/video/uvc/uvc_driver.cmodule_init(uvc_init);static int __init uvc_init(void){ result = usb_register(&uvc_driver.driver);}struct uvc_driver uvc_driver = {原创 2013-06-28 16:59:37 · 8519 阅读 · 0 评论 -
Linux uvc摄像头驱动初探
1.drivers/media/video/uvc/Makefileuvcvideo-objs := uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o \ uvc_status.o uvc_isight.oobj-$(CONFIG_USB_VIDEO_CLASS) += uvcvideo.o2.dr原创 2013-08-20 15:26:39 · 10268 阅读 · 0 评论 -
《Linux总线、设备与驱动》ldd3中demo分析
一、古老方式(不支持热插拔)1.开机前硬件设备已经插入总线;2.操作系统加载总线驱动,开始扫描设备、并为其申请struct device结构,最后挂入总线驱动devices链表;3.操作系统加载设备驱动,注册struct device_driver结构,然后去总线驱动的devices链表中遍历没有绑定driver的设备(即struct device中struct device_driv原创 2013-09-13 11:32:32 · 2005 阅读 · 0 评论 -
《Linux设备节点创建》用户空间ueventd创建设备文件系统节点规则
一、devfs、udev和sysfs是什么关系?linux2.6之前使用devfs设备文件系统,它存在与内核空间;linux2.6之后使用udev设备文件系统,它存在与用户空间、但严重依赖与sysfs文件系统。二、Android(使用linux2.6以后的设备节点创建策略)设备节点的创建 在Android中,没有独立的类似于udev或者mdev的用户程序,这个功能集成到了init原创 2013-09-16 11:20:51 · 8032 阅读 · 0 评论 -
《Linux设备节点创建》内核kobject上报uevent过滤规则
阅读本文前请阅读:Linux总线、设备、驱动与设备节点创建、用户测试程序 一、netlink监听程序testnet.c#include #include #include #include #include #include //该头文件需要放在netlink.h前面防止编译出现__kernel_sa_family未定义#include #include原创 2013-09-17 17:02:08 · 8966 阅读 · 0 评论 -
《Linux kernel panic》内核模块空指针导致系统crash
一、内核模块基于Android模拟器Linux2.6.29内核,该内核模块的设备read方法中存在空指针。test_driver.c#include #include #include #include #include #include #include #include #include #define TEST_MAJOR 240//原创 2013-10-23 16:06:34 · 5361 阅读 · 0 评论 -
Linux内核学习实践之GPIO面板按键
一、platform设备注册的按键映射common/customer/boards/board-m6tv-h32.cstatic struct adc_key adc_kp_key[] = { {KEY_UP, "vol+", CHAN_0, 821, 60},//k3 //change by tank@tcl.com {KEY_LEFT, "原创 2013-11-13 17:57:50 · 2094 阅读 · 0 评论 -
《Linux启动过程分析》init进程挂载其他重要文件系统
说明:本分析基于Linux2.6内核和Android2.3版本,其他版本仅供参考。一、前言 从前边《Linux内核启动之根文件系统挂载分析》一文我们分析到Linux内核启动之后的根文件系统要么是rootfs(ramdisk释放到rootfs后,其根目录存在init的情况下),要么是磁盘等文件系统;系统根目录要么是rootfs的根目录,要么是磁盘的根目录。 但我们一直特别关心的设备文原创 2013-09-30 17:15:55 · 4435 阅读 · 0 评论 -
bionic库增加Andorid系统调用
系统调用例程:libc中有关系统调用1.jb/bionic/libc/unistd/open.c2.jb/bionic/libc/arch-arm/syscalls/__open.Skernel中系统调用相关3.kernel3.1.10/arch/arm/kernel/ehtry-common.S4.kernel3.1.10/arch/arm/kernel/entry-ar原创 2013-03-21 12:53:12 · 3163 阅读 · 0 评论 -
《Linux内核编程》第二章:ALSA驱动
====================================================================================================================================一、ALSA驱动创建声卡过程1.创建声卡 snd_card_create(Linux2.6.30及以后api),snd_c原创 2012-10-20 13:04:21 · 4666 阅读 · 0 评论 -
《Linux内核编程》第十二章:Linux进程调度
1.Linux进程调度工作由内核完成;即ARM必须切到特权模式,Linux转入内核态时完成。2.Linux发生进程调度,也就是进程上下文切换、有如下两种情况: 进程主动放弃CPU:当前进程执行结束;进程将通过系统调用,然ARM切换至特权模式、同时Linux转入内核态。 进程被抢占:当发生硬件中断(包括时间片用完的定时器中断)时;ARM切换至特权模式、Linux转入内核态。下面通原创 2013-05-03 14:44:00 · 999 阅读 · 0 评论 -
《Linux内核编程》第六章:Linux设备驱动中的并发控制
====================================================================================================================================== 对于内核临界区域临界资源的保护,也是Linux设备驱动的关键部分。因为设备驱动牵扯到会同时被许多用户态进程使用情况。原创 2012-11-29 10:36:00 · 826 阅读 · 0 评论 -
《Linux内核编程》第八章:模块魔术字
1.kernel2.6.35.11/include/linux/vermagic.h && kernel2.6.35.11/include/generated/utsrelease.h && kernel2.6.35.11/include/config/kernel.release 2.modinfo *.ko3.去掉魔术字所带svn信息.configCONFIG_LOCALVE原创 2013-01-31 11:15:40 · 5519 阅读 · 0 评论 -
Linux JoyStick设备驱动
======================================================================================================================================一、驱动支持1.make menuconfig2.Device Drivers--->Input device原创 2013-03-06 13:22:19 · 8689 阅读 · 0 评论 -
《Linux内核编程》第十三章:Linux对进程内存的二级页式管理
举例: 当我们通过系统调用fork创建子进程时,将完全复制父进程的页表、同时将该页表置为写保护。 之后,当父进程或子进程向地址空间写数据时,就会产生缺页异常、分配新的页、同时将两个页都置为可写。 目前Linux版本支持4级分页虚拟地址映射,可满足64位CPU的寻址要求。不过,ARM9的MMU只支持两级页表地址转换,而且两级能满足32位CPU的存储管理需求,因此、ARM体系只使原创 2013-05-03 17:43:30 · 1183 阅读 · 0 评论 -
《ARM与Linux些许问题》第三章:Linux如何从用户态进入内核态
====================================================================================================================================一、Linux从用户态切换到内核态的方法有哪些? 大体分为两种;主动式和被动式。 1.被动式:就是Linux在用原创 2012-10-18 16:38:07 · 6339 阅读 · 0 评论 -
arm-linux学习大纲
总结入门到现在过程:1.基于mstar801平台Linux2.6.35.11从源码静态学习;2.基于mstar901平台Linux3.1.10开始做系统调用,从用户态切入内核态;3.基于Android2.3的模拟器内核版本Linux2.6.29对内核启动过程做动态调试;4.基于Skyeye模拟器在内核版本Linux2.6.17上做动态调试;5.基于AM6C平台Linux3.0.原创 2014-12-06 16:10:43 · 1341 阅读 · 0 评论 -
Linux驱动开发——各种外设总线
一、外设控制器与cpu通过AHB等总线连接二、cpu与外设控制器组成soc1.常见外设控制器GPIO控制器MIPI控制器I2C控制器三、soc中外设控制器与外设间的总线MIPI总线I2C总线...原创 2019-06-19 17:14:59 · 1089 阅读 · 0 评论 -
Linux驱动开发——设备树dts与of(open firmeware)架构
一、设备树的引入二、of常用接口及dts文件原创 2019-06-19 15:30:26 · 979 阅读 · 0 评论 -
Linux C多线程编程注意事项及数据处理
/////////////////原创 2016-07-21 10:03:23 · 1070 阅读 · 0 评论 -
Linux shell的实现——execvp
一、类Linux(包括Android)操作系统elf文件执行过程Linux下程序的编译链接及装载(解释)运行从上边分析,我们知道;Linux支持的标准可执行文件格式为elf,Linux内核会对该格式文件进行解析并执行。而这个过程最重要的就是exec系统调用。二、一个简单shell实现转载:/*简单的模拟shell,可以执行带一个输入重定向(或输出重定向或管道)命令,程序存在原创 2015-11-06 09:14:56 · 10804 阅读 · 0 评论 -
64位arm_Linux操作系统驱动兼容性问题
==========原创 2015-10-20 10:09:01 · 1925 阅读 · 0 评论 -
Linux下的网络连接
一、Ethernet二、Wifi三、Pppoe四、有关工具原创 2015-08-25 13:36:43 · 969 阅读 · 0 评论 -
WIFI的Linux驱动部分wext和nl80211
一、对比1.wext为linux-2.6.18版本之前实现方式;用户空间使用ioctl方式访问驱动,设置无线参数或者获取无线参数,配置无线驱动进行联网操作;无线驱动事件到应用层的传递采用的netlink socket技术。2.linux-2.6.18以后wifi驱动实现方式增加了nl80211,无论是用户层访问驱动还是驱动事件通知应用层、都采用的netlink技术。原创 2015-01-07 13:51:30 · 7013 阅读 · 0 评论 -
Kernel编译参数问题
1.Linux内核gprof与insmod模块报Unknown symbol __gnu_mcount_nc (err 0)2.Linux内核warn_unused_result [-Werror=unused-result]报错问题原创 2015-04-16 16:53:40 · 1220 阅读 · 0 评论 -
Linux内核warn_unused_result [-Werror=unused-result]报错问题
一、修改顶层Makefile1.declared with attribute warn_unused_result [-Werror=unused-result]KBUILD_CFLAGS += -Wno-error=unused-result \ -Werror=return-type表示忽略unused-result警告;但是return-type警告原创 2015-04-16 16:50:52 · 10351 阅读 · 0 评论 -
Linux内核gprof与insmod模块报Unknown symbol __gnu_mcount_nc (err 0)
一、现象insmod一个自己编译的ko,会报如下错误:Unknown symbol __gnu_mcount_nc (err 0)二、分析1.对比之前版本ko文件grep “__gnu_mcount_nc”发现其他版本(包括内核更高和更低的版本中)没有这个符号表。2.在该ko下grep “__gnu_mcount_nc”发现有如下符号表另外,ke原创 2014-12-11 14:56:34 · 10262 阅读 · 0 评论 -
Linux3.10内核proc文件系统API变化
一、先看下之前版本在/proc/下创建文件并提供ops proc_dir = proc_mkdir(MOTION_PROC_DIR, NULL); if (!proc_dir) { err = -ENOMEM; goto no_proc_dir; } proc_file = create_proc_entry(MOTION_PROC_FILE, 0666, proc_dir);原创 2014-12-04 14:35:24 · 4385 阅读 · 0 评论 -
Linux内核模块编译方式
一、加入Konfig方式,make menuconfig添加Konfig## 802.1d Ethernet Bridging#config BRIDGE tristate "802.1d Ethernet Bridging" select LLC select STP depends on IPV6 || IPV6=n ---help--- If you say原创 2015-01-07 11:17:51 · 2725 阅读 · 0 评论 -
mprotect设置内存访问权限
一、源代码以及编译vi protect.ci原创 2014-05-16 13:35:57 · 5446 阅读 · 0 评论 -
《Linux设备节点创建》手动与自动创建设备文件系统节点
一、手动创建1.驱动模块test_driver.c#include #include #include #include #include #include #include #define TEST_MAJOR 240 //动态设备节点//struct class *mymodule_class;//结束static i原创 2013-10-16 17:59:20 · 14451 阅读 · 0 评论 -
Linux设备文件系统节点的创建—从mknod到devfs再到udev
《Linux设备节点创建》手动与自动创建设备节点本节是对上处链接的进一步研究。一、Linux2.4之前手动mknod驱动编写:static int __init test_drv_init(void) { int rc;printk("test_driver dev\n");//注册设备rc = register_chrdev(TEST_MAJO原创 2014-01-03 15:56:17 · 6135 阅读 · 0 评论 -
获取输入设备的vid和pid
一、获取/dev/input/event16设备的vid和pidtest.c原创 2014-08-18 17:34:19 · 9230 阅读 · 0 评论 -
USBHID之内核抢占USB驱动问题
==================================================================================================================================== 前些天调试一个elan的USB触摸板,发现插上USB dongle后、加载的驱动总是不对。 后经同事分析,是加载了错误的驱原创 2013-03-06 13:18:34 · 3706 阅读 · 0 评论 -
《Linux操作系统原理》第一章:ARM-Linux操作系统地址空间
前面我们分析了S3C2440A的地址空间《micro2440开发》第一章:S3C2440A地址空间,即ARM硬件的地址空间;作为对比学习,下面我们看看Linux操作系统即软件定义的地址空间: ====================================================================================原创 2012-10-16 11:17:14 · 3435 阅读 · 0 评论 -
《Linux启动过程分析》之区别Initramfs与initrd
一、简介1.initrd 在早期的linux系统中,一般只有硬盘或者软盘被用来作为linux根文件系统的存储设备,因此也就很容易把这些设备的驱动程序集成到内核中。但是现在的嵌入式系统中可能将根文件系统保存到各种存储设备上,包括scsi、sata,u-disk等等。因此把这些设备的驱动代码全部编译到内核中显然就不是很方便。 在内核模块自动加载机制udev中,我们看到利用udevd可以原创 2013-11-22 15:32:42 · 24540 阅读 · 0 评论 -
《ARM与Linux些许问题》第二章:Linux操作系统与ARM工作模式
====================================================================================================================================== 首先,ARM开发板在刚上电或复位后都会首先进入SVC即管理模式,此时、程序计数器R15-PC值会被赋为0x0000 00原创 2012-10-18 16:05:28 · 3397 阅读 · 0 评论 -
《Linux内核编程》第十四章:Linux驱动基础
一、内核模块1.内核模块的编译在内核源码树之外编译时,Makefile写法:obj-m := hello.oKERNELBUILD := /lib/modules/$(shell uname -r)/builddefault: make -C $(KERNELBUILD) M=$(shell pwd) modulesclean: rm -rf *.o *.ko *.mod.c原创 2013-05-08 09:22:52 · 774 阅读 · 0 评论