![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux系统
酸菜鱼的鱼
Linux rtos 驱动应用开发 本博客主要用于工作学习的总结和备份,欢迎大家留言评论交流,谢谢
展开
-
open FIFO for write returns “No such device or address”
https://stackoverflow.com/questions/43402013/open-fifo-for-write-returns-no-such-device-or-address这个回答是说,打开一个fifo文件的时候,如果open设置为非阻塞只写的情况下,读端如果还没有打开的情况下,写端就会返回失败。所以在open一个fifo文件的时候,最好是设置为阻塞状态。这样ope...翻译 2020-03-04 22:08:31 · 1536 阅读 · 0 评论 -
树莓派上实现应用程序开机自启动的方法
项目中需要,在开机的时候,加载一个usb驱动模块和执行一个应用程序。操作如下:加载usb驱动模块:sudo insmod /home/pi/sharedir/drv/artosyn_usb_8020.ko执行应用程序:sudo ./single_xyw&首先参考通用的Linux的开机自启动进程的方法:自己写一个 shell脚本放在/etc/profile.d/目录...原创 2019-12-24 18:29:19 · 1607 阅读 · 0 评论 -
Linux下C语言编译过程详细分析
大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类,一种是编译型语言,例如C,C++,Java,另一种是解释型语言,例如Python、Ruby、MATLAB 、JavaScript。本文将介绍如何将高层的C/C++语言编写的程序转换成为处理...转载 2019-12-24 09:09:38 · 404 阅读 · 1 评论 -
linux内核中模块间相互依赖的自动连接程序:modprobe外部程序和request_module()函数的分析
以下内容总结自《understanding the linux kernel》在Linux系统中一个包括但不限于驱动模块,可能需要一个或者多个其他的模块,这些模块又可能需要其他的模块。为了内核能够自动链接模块,内核需要创建一个内核线程来执行modprobe程序,该线程要考虑由于模块依赖所引起的所有可能因素。modprobe外部程序和insmod类似,链接在命令行中指定的一个模块。然而,mo...原创 2019-05-01 19:55:47 · 1347 阅读 · 0 评论 -
Linux驱动编程API(原子操作,自旋锁,等待队列,延时,定时器,tasklet)
同一资源的并发访问:1.原子操作void atomic_set(atomic_t *v, int i);void atomic_add(int i, atomic_t *v);void atomic_sub(int i, atomic_t *v);void atomic_inc(atomic_t *v);int atomic_inc_and_test(atomic_t *...原创 2019-05-14 22:05:16 · 513 阅读 · 0 评论 -
arm-Linux-gcc 交叉编译工具链的安装和系统环境变量修改方法总结
获取交叉编译工具链:1.从芯片供应商中的SDK中复制交叉编译工具链源码到一个Linux目录。2.解压文件到根目录/添加交叉编译工具链到系统的环境变量中:方法1:1. 打开文件~/.bashrc[root@localhost work]# vim ~/.bashrc2. 在其最后面添加如下语句:export PATH=/opt/FriendlyARM/toolschain/...原创 2019-06-12 22:41:18 · 3167 阅读 · 0 评论 -
arm linux板上修改linux的系统时间为当前的北京时间
参考:https://blog.csdn.net/qq_41248872/article/details/83575611由于项目需要,需要获得linux系统中的当前的北京时间。但是通过localtime接口获取的时间和当前的北京时间无法对应上,比如现在是2019年,但是获取的时间是2016的,并且在系统启动后在命令行终端使用date查看的时间也是对应不上。[root@arm-linu...转载 2019-06-21 15:31:42 · 2160 阅读 · 0 评论 -
Linux中内核模块的单独编译以及makefile的模板介绍
Linux内核模块在编译的时候可以通过命令编译:make -C 内核源码绝对路径 M=模块源码文件所在的绝对路径 modules 此命令的解释:1)进入到内核源码目录2)读取内核源码目录的Makefile3)执行内核源码Makefile中的 modules 目标4)根据 modules 目标的命令编译M所指向的文件路径 Makefile指定 的 C文件如:ARM板的内核...原创 2019-06-25 22:05:22 · 3700 阅读 · 1 评论 -
linux内核模块的参数传递
模块安装时候可以给模块中的变量传递数值,安装后,模块中变量的值就是安装时所传入的值 ,没有传递的变量,则使用代码中默认值。带参数的模块安装后会生成目录:/sys/module/模块名/parameters/示例:如果安装 了名字为 hello_model_param 的模块,则会生成/sys/module/hello_model_param/parameters/这个文件夹下会生成...原创 2019-06-26 22:33:02 · 4145 阅读 · 0 评论 -
linux内核空间和用户空间的数据交换
在内核驱动代码不能直接使用用户空间的指针来存取数据, 需要通过专用的函数来完成数据的复制。Uaccess.h arch\arm\include\Asm从用户空间读取数据copy_from_user 函数原型:inline unsigned long __must_check copy_from_user (void *to, const void __user *from, unsi...转载 2019-07-03 21:43:42 · 503 阅读 · 0 评论 -
linux内核驱动模型-miscdevice杂项设备驱动模型以及实例
杂项设备模型基本介绍设备号:主设备号:固定是 10次设备号: 0~255, 当传递 255 时候表示自动分配次设备号安装后,可以自动创建/dev/设备文件节点。注册函数: int misc_register(struct miscdevice * misc)头文件: #include <linux/miscdevice.h>功能: 注册一个杂项设备参数: mis...原创 2019-06-28 22:30:44 · 698 阅读 · 0 评论 -
linux驱动模块加载时出现与内核不匹配的问题
参考:https://blog.csdn.net/hbcbgcx/article/details/88194321安装模块时出现:[root@FriendlyARM nfs]# insmod key2.kokey2: version magic '2.6.32.2 mod_unload modversions ARMv4 ' should be '2.6.32.2-FriendlyARM ...转载 2019-08-06 21:27:17 · 3116 阅读 · 0 评论 -
嵌入式linux系统快速启动优化的一些方法
嵌入式linux快速启动的一些优化的方法,主要是要掌握嵌入式linux系统的启动流程,以便能够在优化时有所指引。下面是一些总结:嵌入式linux系统快速启动的优化主要是硬件和软件。1硬件:1.1因为在系统启动的时候,cpu需要从flash或者是emmc中读取uboot,kernel和rootfs,以及app相关的代码,并且写入到内存ddr中。所以flash或者emmc及ddr的读写...原创 2019-08-20 20:52:38 · 1771 阅读 · 0 评论 -
linux内核中延迟执行的机制之内核定时器介绍
linux 内核定时器、linux 内核共享工作队列、linux 内核tasklet机制以上的3中方法都可以吧工作推后执行。下面介绍linux内核定时器:内核定时器本质是使用一个硬件定时器实现。相当于裸机程序编写的一个定时器中断程序,在中断程序中有一个变量,每进一次中断增加1 。上面所说全局就是就是 jiffies ,这个值从开机开始,一直在变量 。内核定时器定时使用一个结构体表示...原创 2019-08-31 21:09:49 · 734 阅读 · 0 评论 -
linux 中input子系统介绍及使用案例
1. input概念linux下可以对输入设备使用普通字符设备驱动模型编写,如果每个设备都需要自己注册杂项设备 自己编写文件操作方法,这会造成代码重复,重复工作很多。比如:写一个程序是鼠标---USB,PS/2 ,触摸板。一个键盘,种类很多,不可能每一个都去写读写接口。内核专门为输入类设备编写一个子系统:Input子系统 (输入子系统)其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬...转载 2019-09-08 15:45:25 · 1315 阅读 · 2 评论 -
能够ping通网关以及同一个网段中的ip,但是ping www.baidu.com不通解决方法
基本信息:rv1108的SOC GMAC -------lan8720-------RG-45网线接口。问题描述:首先使用busybox udhcpc,获取到了ip地址192.168.1.86。现在ping 192.168.1.253 就是ping网关地址。能够ping通。ping同一网段的ip地址也是可以ping通,但是无法ping通www.baidu.com这样的外网。...原创 2019-03-04 18:07:43 · 9529 阅读 · 0 评论 -
Linux内核i2c子系统的宏module_i2c_driver详解
在文件/include/linux/i2c.h中:根据解释宏module_i2c_driver可以分解成相应驱动模块的init和exit接口。文件include/linux/device.h中有对module_driver的分解: 综上所述,如果代码中出现 :module_i2c_driver(ov4689_i2c_driver);经过上述宏的作用之后,就成为如下形式...原创 2019-01-24 15:11:32 · 6676 阅读 · 0 评论 -
Linux系统中在/etc/init.d/rcS启动脚本文件中添加命令执行时出现etc/init.d/rcS: line 94: wpa_supplicant: not found 解决方法
在Linux系统的启动脚本中添加命令:wpa_supplicant -c /tmp/wpa_supplicant.config -i wlan0 &执行时出现etc/init.d/rcS: line 94: wpa_supplicant: not found的错误。解决方法:way1:在命令的前面加上命令的路劲:/usr/local/sbin/wpa_supplicant ...原创 2018-10-18 20:15:12 · 3121 阅读 · 0 评论 -
C语言.c文件调用C++ 中cpp文件中的类
C文件部分:#include "bbb.h" //包含相应的头文件test(param0,param1);//在合适的地方调用函数-------------------------------------分割线------------------------------------------------------------------头文件部分:声明的函数在C文件和CPP文...原创 2018-10-20 17:08:39 · 8301 阅读 · 0 评论 -
在BootLoader中使用gpio--获取gpio的高低电平,以及设置相应的管脚的电平高低
以下以rv1108平台为例:在项目中,需要实现一个功能,在Linux kernel加载前BootLoader判断一个引脚电平的高低状态,从而决定加载不同的kernel,以及相应的文件系统,以实现双系统的功能。//判断按键的电平高点状态:#if 1 //set gpio3_a4's direction intput u32Reg = read_XDATA32(0x1033...原创 2018-11-03 16:06:59 · 6488 阅读 · 0 评论 -
Linux中的平台设备驱动模型
在 Linux 的设备驱动模型中,关心总线、设备和驱动这 3 个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。 平台设备匹配的依据是: 1)根据平台设备结构和平台驱动结构中的name成员进行匹配。-- 一个设备对应一个驱动 2)根据平台设备结构中的n...原创 2018-11-11 11:45:48 · 2247 阅读 · 0 评论 -
基于rv1108的双系统的实现方法
背景:产品需要实现双系统,在开机之前将开关拨到不同的位置,系统启动时在loader阶段就会去检测开关按键的状态,根据按键的状态,去不同的偏移地址加载不同的kernel,并且启动相应的rootfs,实现不同的应用。loader:此阶段需要检测案件的io管脚的状态,涉及到基于rv1108的裸机程序的编写,检测io口的电平的高低。不同的电平,赋予不同的kernel的加载地址。...原创 2019-03-20 19:31:35 · 1537 阅读 · 8 评论 -
linux中设置串口的系统调用tcgetattr,tcsetattr,tcflush的使用总结
头文件:#include <termios.h>函数原型:int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);//设置串口属性int tcgetattr(int fd, struct termios *termios_p);//获得串口属性int tcflush(int ...原创 2018-12-05 11:11:54 · 3991 阅读 · 0 评论 -
makeinfo: command not found解决方法
sudo apt-get install texinfo原创 2018-12-12 16:55:49 · 19665 阅读 · 7 评论 -
rk3288 SDK概览
瑞芯微的芯片rk3288的SDK的相关内容:解压SDK后,初步看到的文件目录:直接进入Doc目录,先从文档开始:第一个要看的文档,当然是从Doc/目录下的rockchip Linux软件开发指南.pdf开始。此SDK是基于buildroot的软件开发包,包含了基于Linux系统开发用到的驱动,工具和应用等软件包。 ...原创 2018-12-13 19:02:51 · 3462 阅读 · 1 评论 -
rv1108SDkapp初始化的流程分析
#define MiniGUIMain \MiniGUIAppMain (int args, const char * argv[]); \int main_entry(int args, const char* argv[]) \{ \ int iRet = 0; \ printf("debug-info:FILE:%s fun:%s L...原创 2018-12-06 17:15:50 · 1095 阅读 · 0 评论 -
Linux内核中添加驱动模块到menuconfig中
Linux中驱动模块的加载有两种方法:1.编译成.ko文件在内核启动后,动态的加载到内核中。2.在内核编译的时候同时编译驱动模块。现主要介绍第二种方案:希望将内核驱动加载到内核模块中,需要在menuconfig菜单中选择配置。首先在kernel/drivers/char/目录下新建一个目录用以存放自己驱动模块的源文件。源文件存放好了之后,还需要添加并修改相应的Kconfig和M...原创 2018-12-15 16:24:36 · 2445 阅读 · 0 评论 -
使用 cd - 时出现bash: cd: OLDPWD not set的错误信息
在Linux中使用cd -,出现入下错误:bash: cd: OLDPWD not set是因为开始打开终端,第一次操作cd命令的原因。cd - 的作用是进入上一次cd的目录,也就是说cd命令后面的参数“-”,是代替上一次cd后面的参数。同样cd - 也等同于cd OLDPWD命令。...原创 2018-12-17 12:24:25 · 7749 阅读 · 2 评论 -
Linux shell中BASH_EOURCE和BASH_SOURCE[0]的作用:取得当前执行的shell脚本的相对路径
BASH_EOURCE和BASH_SOURCE[0]的作用都是一样的,就是取得当前执行的shell脚本的相对路径如果希望获得,当前执行脚本的绝对路径,可以采用以下方式:DIR_T="$( cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 1 #!/bin/bash 2 3 echo $0 $1 $2 4 ...原创 2018-12-17 14:03:47 · 5003 阅读 · 0 评论 -
ubuntu下查看当前版本的版本号的方法。
1.uname -a2.lsb_release -a3.cat 、etc/isiue4.cat /etc/lsb-release原创 2018-12-12 11:42:11 · 2236 阅读 · 0 评论 -
Linux中的稳像和光流部分的代码梳理(dsp和videocamera驱动的调用执行流程)
在Linux的应用程序中app/video/opt_eis/vision_service.cpp ,有如下代码。打开了设备节点dsp和video5。并在此文件中操作这两个设备。944 dsp_fd = open(PATH_DSP, O_RDWR); 512 /*--------------------- cam initial -----------------...原创 2018-10-13 16:50:49 · 399 阅读 · 0 评论