![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式开发
文章平均质量分 67
杭城江城子
这个作者很懒,什么都没留下…
展开
-
根本上解决mt7628-openwrt-插拔网线ip不释放
mt7628、mt7688插拔网线ip未释放;无法监听插拔网线事件原创 2022-10-19 19:05:53 · 1395 阅读 · 1 评论 -
__attribute__的简述
一、__attribute__((section("name")))gcc提供的扩展机制,可以将特定的变量存放在自定义的段中,其中"name"是自定义段名。 通过外部引用 "__start__name"、"__stop__name"可以获取到段的启始地址与结束地址,可能在命名自定义的段名"name"时定义了这两个变量,我们这里只需要引用,不需要定义它。代码示例:modules.h#ifndef __MODULES_H__#define __MODULES_H__#include...原创 2022-03-03 11:15:23 · 1277 阅读 · 0 评论 -
查看串口波特率等信息
查看串口信息stty -F /dev/ttyS1 -a #ttyS1为要查看的串口设置串口stty -F /dev/ttyS1 ispeed 115200 ospeed 115200 cs8设置成115200波特率,8位数据模式。man stty查看帮助。读串口cat /dev/ttyS1写串口echo "xxx" > /dev/ttyS1...原创 2021-11-12 10:05:54 · 2077 阅读 · 0 评论 -
T507之AC107调试
写在前面:整理的调试经验未按顺序编写,因为不同的开发人员遇到的问题也不同,建议通读全篇后选择自己需要的内容零、常用命令1,安卓设备中查看声卡 cat /proc/asound/cards2,安卓设备中查看sndahub配置,确认I2S0作为输入(ac107硬件接线在I2S0)tinymix -D 1(sndahub声卡序号为1,所以-D 1)ac107与t507接线图如下:3,安卓设备中录音测试./tinycap_ahub test1.wav -aD...原创 2021-10-26 10:57:27 · 3465 阅读 · 0 评论 -
使用DEVICE_ATTR设置0666权限编译报错:negative width in bit-field ‘<anonymous>‘
使用DEVICE_ATTR设置0666权限编译报错:./include/linux/bug.h:37:45: error: negative width in bit-field '<anonymous>'#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) ^./include/linux/kernel.h:857:3: no...原创 2021-10-18 17:05:44 · 1768 阅读 · 0 评论 -
shell编程——if语句
原文地址:shell编程——if语句作者:macg if 语句格式if 条件then Commandelse Commandfi 别忘了这个结尾If语句忘了结尾fitest.sh: line 14: syntax error: unexpected end of fi if 的三种条件表达转载 2018-02-23 17:03:37 · 160 阅读 · 0 评论 -
error: ‘struct device’ has no me…
在新版本的内核中struct device已经没有bus_id成员,取而代之的是通过dev_name和dev_set_name对设备的名字进行操作。 dev_name和dev_set_name在2.6.35.6内核中的源代码如下: static inline const char *dev_name(const struct device*dev)原创 2018-02-23 17:03:42 · 136 阅读 · 0 评论 -
配置制作nfs文件系统
准备:开发板与宿主机都通过交叉网线连接到路由器1,编译内核1)清除原有配置文件 make distclean2)配置内核a: cp FORLINUX6410_CFG .configb: make menuconfig ARCH=arm 进入File systems选项,进入Network File systems选 项,确认rootfile system on nfs原创 2018-02-23 17:03:45 · 282 阅读 · 0 评论 -
/proc/sys/kernel/printk
/proc/sys/kernel/printk The four values in this fileare console_loglevel, default_mes- sage_loglevel, minimum_console_level and default_con- sole原创 2018-02-23 17:03:48 · 1635 阅读 · 0 评论 -
网卡设备驱动
每个网络接口都由一个net_device结构来描述,该结构可使用如下内核函数动态分配: 1.struct net_device* alloc_netdev(intsizeof_priv,const char *mask,void(*setup)(struct net_device *)) 参数: sizeof_priv //私有数据区大小 (net_d原创 2018-02-23 17:03:51 · 175 阅读 · 0 评论 -
class_create(),device_create自动…
从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用class_device_cre原创 2018-02-23 17:03:56 · 463 阅读 · 0 评论 -
异步通知fasync
linux设备驱动归纳总结(三):7.异步通知fasyncxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx异步通知fasync是应用于系统调用signal和sigaction函数,下面我会使用signal函数。简单的说,signal函数就是让一个信号与与一个函数对原创 2018-02-23 17:03:59 · 254 阅读 · 0 评论 -
内核定时器
linux设备驱动归纳总结(七):2.内核定时器xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节将介绍内核定时器的使用。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx原创 2018-02-23 17:04:02 · 157 阅读 · 0 评论 -
poll 和 select
十三、Linux驱动程序开发(8) - 高级字符驱动程序(2)三、poll 和 select当应用程序需要进行对多文件读写时,若某个文件没有准备好,则系统会处于读写阻塞的状态,并影响了其他文件的读写。为了避免这种情况,在必须使用多输入输出流又不想阻塞在它们任何一个上的应用程序常将非阻塞 I/O 和poll(SystemV)、select(BSD Unix)、 epoll(linux2原创 2018-02-23 17:04:05 · 123 阅读 · 0 评论 -
基于platform的ok6410按键中断实验
plat_btn_device.c #include #include #include #include #include #include #include #include #define DEVICE_NAME "ok6410_plat_btn"static struct resource s3c_buttons_resource[] = {原创 2018-02-23 17:04:07 · 151 阅读 · 0 评论 -
open device buttons: Device or r…
原因:飞凌原先内核中的按键驱动已经占用相关中断资源,所以无法打开 解决方法: 重新编译内核,配置内核时 devicedriver->char->gpio_key 去掉这个配置就可以了 或是device driver->Input devicesupport-->Keyboards去掉这个配置就可以了自己写了一个按键驱动程序,内核模块加原创 2018-02-23 17:04:10 · 212 阅读 · 0 评论 -
C语言关键字volatile的使用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器) 2) 一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables)原创 2018-02-23 17:04:13 · 422 阅读 · 0 评论 -
s3c6410---外部中断---key (基于OK…
先说一下外部中断:顾名思义,由s3c6410外部触发的中断就是外部中断,由s3c6410内部触发的是内部中断。但是具体到咱们的板子上,到底哪些是外部中断,哪些是内部中断呢?可以这样概括,除了INT_EINT0---INT_EINT4之外的都是内部中断。像watch dog就是内部中断,像key,wm9717触发的就是外部中断。 先说下外部中断从外设到cpu的具体流程:对原创 2018-02-23 17:04:16 · 293 阅读 · 0 评论 -
定时器timer
说明: (1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用。相对于事件驱动而言,内核中有大量函数是基于时间驱动的。 有些函数是周期执行的,比如每10毫秒刷新一次屏幕;有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务。 要区分: *绝对时间和相对时间 *周期性产生的事件和推迟执行的事件 周期性事件是由系统系统定时器原创 2018-02-23 17:04:19 · 270 阅读 · 0 评论 -
定时器timer(续)
程序三:利用jiffies及相关宏,实现定时5秒。创建文件夹/nfsroot/kern/2012-05-11/03/。创建文件/nfsroot/kern/2012-05-11/03/test.c,内容如下:ViewCode View Code #include #include #include #include MODULE_LICENS原创 2018-02-23 17:04:22 · 126 阅读 · 0 评论 -
定时器timer(再续)
程序五:短延时及长延时。创建文件夹/nfsroot/kern/2012-05-11/05/。创建文件/nfsroot/kern/2012-05-11/05/test.c,内容如下:ViewCode View Code #include #include #include #include #include #include MO原创 2018-02-23 17:04:24 · 182 阅读 · 0 评论 -
s3c6410温度传感器18b20驱动程序及…
以下是驱动程序:#include #include #include #include #include #include #include #include #include #define DEVICE_NAME "TEM0"static struct cdev cdev;struct cl原创 2018-02-23 17:04:27 · 399 阅读 · 0 评论 -
OK6410 注册ADC驱动提示错误16
request_irq的返回值16表示此中断已被占用,这时,最好的解决办法是:注册时使用共享标志符IRQ_SHARED。1,ADC驱动中的request_irq函数中的flags参数上添加IRQF_SHARED,最后一个参数上不要为空即可,这个参数dev_id是为后来的free_irq()函数准备的,因为释放时内核需要知道释放的是此中断对应的哪了个设备,dev_id告诉了它。2,找到占用此原创 2018-02-23 17:04:30 · 167 阅读 · 0 评论 -
linux下的关机命令
在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各种关机命令。 1.shutdown shutdown命令安全地将系统关机。 有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。因为linux与windows不同,其后台运行原创 2018-02-23 17:04:36 · 445 阅读 · 0 评论 -
Linux C 创建目录函数mkdir相关
I.Linux C 创建目录函数mkdir的mode设置问题函数原型:#includestat.h>int mkdir(const char *path, mode_t mode);参数:path是目录名mode是目录权限返回值:返回0 表示成功, 返回 -1表示错误,并且会设置errno值。mode模式位原创 2018-02-23 17:04:39 · 4083 阅读 · 0 评论 -
字符串清空方法
假设这个一维字符串数组是str[80]----不一定是一维字符串数组,多维数组,结构都可以。方法1:使用运行库函数memset():memset(str, 0, sizeof(str));方法2:使用Windows API函数ZeroMemory():ZeroMemory(str, sizeof(str));但不能用于指针。指针的情况下,必须这样:struct mystr {..原创 2018-02-23 17:04:41 · 25946 阅读 · 0 评论 -
QFP PQFP LQFP TQFP封装形式及PCB…
QFP PQFP LQFP TQFP封装形式及PCB详解!问题:画PCB时,会发现很多的集成电路都是QFP封装,比如很多的单片机都有这种封装。各个器件商会在自己的数据手册中说明他的器件是QFP,LQFP或TQFP,然后,有的给出封装尺寸图,有的则不给。那么,同一种封装,引脚间距是固定的吗,这些QFP,LQFP,TQFP相互之间的封装尺寸一样吗,相同引脚个数的这些封装可不可以通用,他们之间到底有原创 2018-02-23 17:04:44 · 1229 阅读 · 0 评论 -
QFP封装的驱动
自从 1987年以来,每当工业需要有关焊盘图形尺寸和容差方面的信息时,总是依照表面贴装设计和焊盘图形标准IPC-SM-782。1993年曾对该标准的修订版A进行了一次彻底修正,接着1996年对新的片式元件进行了修正,到1999年又对引脚间距小于1.0 mm的BGA元件进行了修正,该文件向用户提供了表面贴装焊盘的合适尺寸、形状和容差,以保证这些焊点的焊缝满足要求,同时可供检验与测试。该文件还努力紧跟原创 2018-02-23 17:04:47 · 433 阅读 · 1 评论 -
Linux中的待机和休眠详解
待机与休眠的区别,待机(Suspend)是挂起到内存,关机后需要保持对内存供电,不能完全关闭电源,但是这种方式重启动的速度最快。休眠(Hibernate)是挂起到硬盘,可以完全关闭电源。如果是在用GNOME,在GNOME中, 打开 GNOME Terminal,输入gnome- 后 TAB 自动补全,果然发现一个命令:gnome-power-cmd,就是它了。待机:$ gnome-pow原创 2018-02-23 17:04:50 · 2055 阅读 · 0 评论 -
解决 umount SD card 时出现…
原文地址:umount SD card 时出现的 "Device is busy"">解决 umount SD card 时出现的 "Device is busy"作者:kevin1.最近几次发现mount了一个网络共享磁盘后, 就无法umount,老是提示:device is busy, 服务又不能停止的。 无意发现可以用"umount -l"解决!2.mount的基本用法是?格式:mo转载 2018-02-23 17:04:52 · 384 阅读 · 0 评论 -
linux 休眠与唤醒
原文地址:休眠与唤醒">linux 休眠与唤醒作者:kevin在Linux中,休眠主要分三个主要的步骤:(1)冻结用户态进程和内核态任务;(2)调用注册的设备的suspend的回调函数;(3)按照注册顺序休眠核心设备和使CPU进入休眠态。 冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存下所有进程的上下文。当这些进程被解冻的时候,他们是不知道自己被冻结过的,只是简单转载 2018-02-23 17:04:55 · 1289 阅读 · 0 评论 -
6410的GPIO使用
一,每组GPIO的数目: #define S3C64XX_GPIO_A_NR (8) #define S3C64XX_GPIO_B_NR (7) #define S3C64XX_GPIO_C_NR (8) #define S3C64XX_GPIO_D_NR (5) #define S3C64XX_GPIO_E_NR (5)原创 2018-02-23 17:04:58 · 153 阅读 · 0 评论 -
linux下开机自启动应用程序
根据linux的开机启动流程,在加载内核后执行/sbin/init,然后根据运行级别i启动/etc/rci.d中的各个脚本,结束后启动个人化设定/etc/rc.d/rc.local脚本应用程序的执行可以在/etc/rc.d/rc.local这个脚本文件中进行设置在/home/temp/test目录下放置你的程序,这里以一个简单的程序为例,打开一个file文件,往里写一段话程序代码如下:原创 2018-02-23 17:05:03 · 9514 阅读 · 0 评论 -
linux中断之中断注册
业的linux驱动开发离不开中断处理,在处理中断,首先要注册中断,在linux下通过request_irq来注册中断的,不同内核版本,注册中断所需要的参数也不同,本文以linux-2.6.34为例,对比老版本进行说明。 request_irq()函数在include/linux/interrupt.h中定义,原型为: staticinline int __must_check原创 2018-02-23 17:05:08 · 804 阅读 · 0 评论 -
win8(32位和64位)下打开stc-isp…
32位win8系统:把STC ISP目录下的mscomm32.ocxmscomctl.ocxmsstdfmt.dllcomdlg32.ocx这四个文件复制到C:\Windows\System32 这个文件夹里面,然后,把以下代码复制到记事本,另存为install.bat,接着右击刚刚保存好的 install.bat 文件,选择以管理员身份运行。regsvr32原创 2018-02-23 17:05:13 · 319 阅读 · 0 评论 -
OK6410之ADC驱动硬件分析---阻塞与…
在OK6410开发板中,有AD CONVERT部分,接口为XDAC_AIN0 在S3C6410的PDF中:The 10-bit/12-bit CMOS ADC (Analog to Digital Converter) is arecycling type device with 8-channel analog inputs. It converts the analog i原创 2018-02-23 17:05:15 · 255 阅读 · 0 评论 -
动态链接库在LabVIEW中的高级应用
动态链接库在LabVIEW中的高级应用摘 要:LabVIEW中的提供了调用共享库函数的接口,但是一些现成的函数库却因为接口参数类型不同而不能在LabVIEW中使用。利用重新编写动态链接库的方法可以建立旧函数库与LabVIEW联系的通道,提高现有资源的利用率。本文以SDK2000图像采集卡为例,介绍具体的实现过程。 关键字:LabVIEW;动态链接库;CLF节点原创 2018-02-23 17:05:18 · 3092 阅读 · 0 评论 -
普通运动控制卡在LabVIEW平台上的…
摘 要:介绍了一种在LabVIEW平台上使用普通运动控制卡实现快速开发多轴运动控制程序的方法。该方法首先应用运动普通控制卡提供的函数库编译成通用动态链接库文件,然后使用LabVIEW与外部代码进行连接的动态连接库机制调用这个文件,实现实时的运动控制。实践证明,该方法不仅可以很好地发挥运动控制卡的性能,而且可以借助LabVIEW强大的界面编辑功能,缩短程序开发周期,美化人机界面。 关键词:原创 2018-02-23 17:05:21 · 8227 阅读 · 2 评论 -
OK6410如何去掉触摸屏驱动
一、配置内核make menuconfig ARCH=arm 去掉第三张图片中touchscreens选项前的*若只做这一步,编译内核会提示如下错误:arch/arm/mach-s3c64xx/built-in.o: In function`smdk6410_machine_init':/xh/work/linux-3.0.1/arch/arm/mach-s3c64xx/mach-s原创 2018-02-23 17:05:24 · 159 阅读 · 0 评论 -
数学计算函数
数学计算函数这些函数如没有特殊强调头文件都是math.h使用GCC编译时要加入-lm, 很多资料都这样写,个人经验加不加都行1. 计算绝对值(3)abs: 计算整形数的绝对值头文件: stdlib.h函数定义: int abs(int j);labs: 计算长整型数的绝对值头文件: stdlib.h函数定义: long int labs(long int j);fabs:原创 2018-02-23 17:05:26 · 1298 阅读 · 0 评论