嵌入式Linux
奶爸程序员
匠芯筑梦,不负所期。不积跬步,无以至千里。不积小流,无以成江河。
给这个世界留下自己的足迹。“如果你不彻底测试自己的代码,恐怕你开发的就不只是代码,可能还会声名狼藉。“
展开
-
OpenWrt 固件编译教程
OpenWrt 固件编译教程,进行openwrt的移植和编译,原创 2022-11-19 11:38:51 · 7113 阅读 · 1 评论 -
分享一个嵌入式linux硬件看门狗操作
查看 /dev/watchdog 是否存在该节点,如果存在,驱动支持硬件看门狗操作。#include <stddef.h>#include <ctype.h>#include <stdio.h>#include <string.h>#include <linux/watchdog.h>#include <sys/ioctl.h>#include <linux/rtc.h>#include <errn原创 2021-10-15 17:09:16 · 522 阅读 · 0 评论 -
linux 基于shell 的软件看门狗
#!/bin/shwhile : #循环,为了让脚本一直运行监控dosleep 15 # 每次监测时间15秒DTTERM=`pgrep appName` #appName为进程名if [ -n "$DTTERM" ]then echo "app service is ok" >> /var/log/app.log#正确输入信息到日志文件else echo "app servicie not exist" >> ...原创 2021-09-10 09:57:54 · 2790 阅读 · 0 评论 -
mdev和udev之间的关系
关于udev和mdev之间的区别与联系我发现自己现在还没有把它完整的给区分开来和联系起来.设备文件系统有devfs,mdev,udev mdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统,而udev一般用在PC上的linux中,相对mdev来说要复杂些,devfs是2.4内核引入的,而在2.6内核中却被udev所替代,他们有着共同的优点,只是devfs中存在一些未修复的BUG,作者也停止了对他的维护,最显著的一个区别,采用devfs时,当一个并不存在的设备结...原创 2021-01-25 14:55:45 · 1142 阅读 · 0 评论 -
ubuntu下u盘的自动挂载
一般固定的u盘在/dev/sdxx 的形式,先在/mnt下建一个usb目录用于挂载。1.在/etc/udev/rules.d下创建10-usb.rules文件,内容如下:SUBSYSTEM=="block", KERNEL=="sdb4", ACTION=="add", NAME="Myusb", SYMLINK+="Myusb_link", RUN+="/bin/bash /home/usbadd.sh"SUBSYSTEM=="block", KERNEL=="sdb4", ACTION=="rem原创 2021-01-23 11:12:22 · 4964 阅读 · 4 评论 -
linux下 wpa_supplicant 工具使用
官网:http://w1.fi/wpa_supplicant/wpa_supplicant是一个连接、配置WIFI的工具,它主要包含wpa_supplicant与wpa_cli两个程序。通常情况下,可以通过wpa_cli来进行WIFI的配置与连接,如果有特殊的需要,可以编写应用程序直接调用wpa_supplicant的接口直接开发。启动wpa_supplicant应用$ wp...原创 2020-04-14 15:33:39 · 1157 阅读 · 0 评论 -
linux wlan无线网卡调试常用命令 iw
# iw help # 帮助# iw list # 获得所有设备的功能,如带宽信息(2.4GHz,和5GHz),和802.11n的信息# iw dev wlan0 scan # 扫描# iw event # 监听事件 # iw dev wlan0 link # 获得链路状态 # iw wlan0 connect foo # 连接到已禁用加密的AP,这...原创 2020-03-17 15:01:10 · 3237 阅读 · 0 评论 -
linux select的用法
在Linux中,对于实现I/O端口的复用,select函数我们会经常看到。 Select 函数详细介绍 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数...原创 2020-03-16 21:13:45 · 325 阅读 · 0 评论 -
QT移植多点触控
注:本方法只在S5P4418平台,Qt版本:5.4.1编译器:arm-cortex_a9-linux-gnueabi-gcc-4.7.4下试验成功,其他平台未做测试,不同的qt和工具链版本之间会有一定的差异。前提是触摸屏的硬件及驱动是支持多点触摸的(evtest程序测试)。1、编译之前准备tslib-mt.tar.gz 多点触控校准程序 mtdev-1.1.5.tar.gz ...原创 2020-03-04 17:25:36 · 1990 阅读 · 0 评论 -
pthread_cond_wait和pthread_cond_signal使用方法
pthread_cond_wait() 用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread_c...原创 2019-01-23 13:22:50 · 2890 阅读 · 0 评论 -
asmlinkage简要理解
一、在大型C语言项目工程或者linux内核中我们都会经常见到两个FASTCALL和armlinkage 两个标识符(修饰符),那么它们各有什么不同呢?今天就给大家共同分享一下自己的心得. 大家都知道在标准C系中函数的形参在实际传入参数的时候会涉及到参数存放的问题,那么这些参数存放在哪里呢? 有一定理论基础的朋友一定会肯定地回答:这些函数参数和函数内部局部变量一起被分配到了函数的...原创 2019-01-22 13:56:38 · 11915 阅读 · 1 评论 -
sysfs_create_group创建sysfs接口
在编写驱动程序时,需要对驱动里的某些变量进行读写,或函数调用,再或者驱动某个开关量。可通过sysfs接口创建驱动对应的属性,便可以在用户空间通过sysfs接口的show和store函数与硬件交互;DEVICE_ATTR宏定义在include/linux/device.h中1、函数原型是:#define DEVICE_ATTR(_name, _mode, _show, _s...原创 2019-01-11 15:30:54 · 3036 阅读 · 0 评论 -
RTC-PCF8563驱动问题总结
插上电池,确保电池有电(测量电池座两端的电压为2.7V左右即为有电),没有接入电池或者电压过低时会有打印:进入系统后通过依依命令 # date -s "2017-01-21 12:34:56"Sat Jan 21 12:34:56 UTC 2017# hwclock -w# hwclock Sat Jan 21 12:35:34 2017 0.000000 seconds#...原创 2018-10-23 17:50:52 · 7702 阅读 · 1 评论 -
编译驱动的Makefile解析
一个典型的编译驱动模块的Makefile文件如下所示:KERN_DIR = /root/driver/kernelobj-m += module_test.oall: make -C $(KERN_DIR) M=`pwd` modules.PHONY: clean clean: make -C $(KERN_DIR) M=`pwd` clean 解析:obj-m += module_tes...原创 2018-05-14 13:51:24 · 2617 阅读 · 0 评论 -
在Linux内核中打印日志时间戳
今天在和FPGA,联调过程中,需要测试脉冲信号。目的是为了测试两个中断之间的时间间隔。开启内核的打印时间在编译Linux内核:make menuconfig ---> Kernel hacking -->printk and dmesg options--> show timing information on printks 当选中这个选项后,启动内核,会在日志信息前面加上时...原创 2018-04-25 15:36:28 · 8284 阅读 · 0 评论 -
zynq制作SD镜像
一、下载镜像文件链接:https://pan.baidu.com/s/1YQz76uzLquzuCjkd7ce56A 密码:zh0v二、制作SD镜像SD 卡镜像xillinux-1.3.img 在linux 下可以直接挂载并做修改,修改前应该做好备份。xillinux-1.3.img 镜像分为两个分区part0 和part1,其中part0 是FAT32 格式,part1 是ext4 格式。要挂载...原创 2018-04-11 11:07:08 · 1965 阅读 · 0 评论 -
ZYNQ USB SD驱动问题总结
当插入USB时,会出现以下问题:由于插入USB,出现的问题,首先排查USB驱动。经排查USB,无任何异常。经分析,1.首先我利用zynq 带的迷你型的文件系统uramdisk.image.gz,启动起来,因为此文件系统全部加载到内存里面运行,启动起来之后,将SD拔出。此后问题没有出现。可能问题出现的SD卡的布线上。当通信频率比较高时,有可能会造成SD通信出现错误。剩下 就只能交给硬件工程师来处理了...原创 2018-03-28 11:27:29 · 2287 阅读 · 0 评论 -
INPUT输入子系统的测试方式 evtest
利用evtest进行嵌入式设备 Input下设备的测试evtest源码下载地址:链接:https://pan.baidu.com/s/1HEkQ01SsO9oAs5GnI4dXdA 密码:7v16tar -xjvf evtest_1.33.orig.tar.bz2cd evtest-1.33/./configure 修改Makefile修改成自己的交叉编译器。然后执行 make当前...原创 2018-04-09 17:17:43 · 3974 阅读 · 6 评论 -
linux设备驱动之内存映射
一、内存映射所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。Linux提供了mmap()函数,用来映射物理内存。在驱动程序中,应用程序以设备文件为对象,调用mmap()函数,内核进行内存映射的准备工作,生成vm_area_struct结构体,然后调用设备驱动程序中定义的mmap函数。二、 映射的种类把同一个物理地址映射为虚拟地...原创 2018-02-24 09:39:33 · 548 阅读 · 0 评论 -
SQlite在ARM上的编译移植
SQlite在ARM上的编译移植 SQlite是一个开源的嵌入式数据库,至于它的特性和性能,这里就不介绍了,google上很多介绍了。SQlite是很受欢迎的一个小型的数据库,现在手机上的两大操作系统ios和android上都是用它,足以见它的分量了吧。 SQlite的官网是www.sqlite.org,官网上的下载页面已经有很多官方编译好的各个操作系统版本的可执行文件和库文件原创 2017-09-22 10:00:14 · 1256 阅读 · 0 评论 -
嵌入式ntp服务器的移植
嵌入式ntp服务器的移植网络时间协议Network Time Protocol(NTP) 是一种确保时钟保持准确的方法。如果可以访问互联网,只需安装ntp的客户端软件到互联网上的公共ntp服务器自动修正时间即可 一:源码获取1.官网下载http://www.ntp.org/点击download选项页2.百度网盘:链接:http://pan.baidu.com/s/1bp原创 2017-10-12 21:08:30 · 1342 阅读 · 0 评论 -
设备树那些事
三 属性(property)device_type = "memory"就是一个属性,等号前边是属性,后边是值。节点是一个逻辑上相对独立的实体,属性是用来描述节点特性的,根据需要一个节点由0个,1个或多个属性表示节点的特性。一个属性由名字和值两部分组成。和节点的名字类似,规范要求属性名字由1到31个字符组成。和节点名字字符的种类有些区别,不允许有大写字母,增加了问号和井号两个字符。原创 2017-12-21 17:19:49 · 291 阅读 · 0 评论 -
设备树那些事
四 中断中断一般包括中断产生设备和中断处理设备。中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件。中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生设备的中断源称之为中断控制器中对应中断的子中断。一般情况中断产生设备数量要多于中断控制器,多个中断产生设备的中断都由一个中断控制器处理,这种多对一的关系也很像一个树形结构,所以在设备树中,中断也原创 2017-12-21 17:26:46 · 359 阅读 · 0 评论 -
设备树那些事
五 根节点一个最简单的设备树必须包含根节点,cpus节点,memory节点。根节点的名字及全路径都是“/”,至少需要包含model和compatible两个属性。model属性我们在属性那节已经说过是用来描述产品型号的,类型为字符串,推荐的格式为“manufacturer,model-number”(非强制的)。根节点的model属性描述的是板子的型号或者芯片平台的型号,如:model原创 2017-12-21 17:31:04 · 319 阅读 · 0 评论 -
设备树那些事
六 memory&chosen节点根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点。memory节点用来描述硬件内存布局的。如果有多块内存,既可以通过多个memory节点表示,也可以通过一个memory节点的reg属性的多个元素支持。举一个例子,假如某个64位的系统有两块内存,分别是• RAM: 起始地址 0x0, 长度 0x80000000 (2GB)原创 2017-12-21 17:36:41 · 375 阅读 · 0 评论 -
设备树那些事
二 节点(node)的表示首先说节点的表示方法,除了根节点只用一个斜杠“/”表示外,其他节点的表示形式如“node-name@unit-address”。@前边是节点名字,后边是节点地址。节点名字的长度范围是1到31,可以使用的字符在ePAPR规范中有说明,包括:0-9 数字a-z 小写字母A-Z 大写字母, 逗号. 句点(英)原创 2017-12-21 17:18:20 · 266 阅读 · 0 评论 -
设备树那些事
一 概述设备树(Device tree)是一套用来描述硬件属相的规则。ARM Linux采用设备树机制源于2011年3月份Linux创始人Linus Torvalds发的一封邮件,在这封邮件中他提倡ARM平台应该参考其他平台如PowerPC的设备树机制描述硬件。因为在此之前,ARM平台还是采用旧的机制,在kernel/arch/arm/plat-xxx目录和kernel/arch/arm/原创 2017-12-21 17:15:30 · 360 阅读 · 0 评论 -
zynq7020 SD无法挂载EXT4文件系统
问题一:仔细观察错误类型unknown-block(0,0),如下图此问题,应该判定为设备树种关于bootargs = "console=ttyPS0,115200 init=/sbin/init root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw earlyprintk"; linux,stdout-path = "serial0:11原创 2018-01-16 15:32:57 · 1946 阅读 · 4 评论 -
linux zynq 中断控制器
uart@e0001000 { compatible = "xlnx,ps7-uart-1.00.a"; reg = ; interrupts = ; interrupt-parent = ; clock = ;};The second value is the interrupt number. The translate function adds 16 to SPIs and 3原创 2018-07-06 17:34:04 · 1588 阅读 · 0 评论 -
zynq7020 uboot调试信息解决
Xilinx First Stage Boot Loader Release 2014.4 Jan 3 2018-17:06:39Devcfg driver initialized Silicon Version 3.1Boot mode is SDopening BOOT.BINSD: rc= 0SD Init Done opening BOOT.BIN is原创 2018-01-03 17:40:56 · 3178 阅读 · 0 评论 -
zynq7020调试信息记录
Xilinx First Stage Boot Loader Release 2014.4 Jan 3 2018-16:53:52Devcfg driver initialized Silicon Version 3.1Boot mode is SDSD: rc= 0SD Init Done Flash Base Address: 0xE0100000Reboot status registe...原创 2018-01-03 17:12:01 · 2903 阅读 · 1 评论 -
zynq平台QT4.73移植
平台:Ubuntu16.04+zynq7020(目前此版本测试成功)一、虚拟机的环境变量设置交叉编译工具设置注意:一定看好自己的板子跑的是什么文件系统?选择什么样的编译器。本人用的是 linaro下Ubuntu交叉编译工具一定要使用 arm-linux-gnueabihf-apt-get install gcc-arm-linux-gnueabihf二、移植tslib库问题:测试了一个tslib1...原创 2018-03-02 09:50:55 · 2263 阅读 · 0 评论 -
SQLite常用的函数
SQLite常用的函数一、简单说明1.打开数据库int sqlite3_open( constchar *filename, // 数据库的文件路径 sqlite3**ppDb // 数据库实例); 2.执行任何SQL语句int sqlite3_exec( sqlite3*,原创 2017-09-27 08:56:37 · 1388 阅读 · 0 评论