- 博客(264)
- 资源 (7)
- 收藏
- 关注
原创 驱动程序BUG: scheduling while atomic报错分析
问题描述在编写SPI驱动的时候,在自旋锁保护的临界区调用了spi_sync函数,这个函数是能够引起休眠进而引起调度的。错误信息如下:BUG: scheduling while atomic: spi_touch_threa/777/0x00000002Modules linked in: spidev mdrv_crypto sd_mod usb_storage ehci_hcd ntfs vfat msdos fat kdrv_sdmmc mmc_block mmc_core nfsv2 nfs l
2021-12-06 16:32:53 1901
原创 char* buf和char buf[64],定义两种字符串作为参数传递给函数的区别
问题描述:最近在项目中遇到了一个让人疑惑的问题,有一个发送函数需要传递void*类型的参数,我定义了char *buf = “abcdefg”;然后将buf作为参数传递给了这个发送函数,但是函数返回值显示发送成功,但是另一端没有接收到数据。查找了好久,最终我将char *buf = “abcdefg”,改为char buf[64] = “abcdefg”;然后再次传输,结果传输成功。总结:以后遇到这种情况可以直接分配具体的数组空间。...
2021-06-23 09:52:34 5194
原创 device_attribute和device_create_file在sys系统生成版本信息的文件
device_attribute 主要用于在sys子系统中,用户空间与内核空间的交互,在这里采用device_attribute 将版本信息输出到sys子系统中。用户空间用cat指令即可查看。有两种方式:1、创建字符设备使用device_create创建设备文件,返回值是struct device结构体类型的mydevice,然后使用device_create_file创建xxxinfo我文件,参数就是前面创建设备文件的返回值mydevice,和自己定义的device_attribute 结构体变量xx
2021-06-23 09:41:20 2429
原创 加载或卸载驱动时报错Unable to handle kernel paging request at virtual address bf933218
问题描述:写了一个USB驱动,在probe函数中创建了一个线程,然后线程会一直等待一个全局变量标志位,如果变量为1,就将变量重新置零。然后进行相关的业务逻辑操作。到时在加载完驱动或者是卸载完驱动后,会报一下错误,但是程序没有core dump。Unable to handle kernel paging request at virtual address bf933218pgd = c0004000[bf933218] *pgd=26f20811, *pte=00000000, *ppte=000
2021-06-21 20:21:44 2771
原创 依赖Linux内核源码编译模块报错arch_hweight.h:54:42: error: expected ‘:’ or ‘)’ before ‘POPCNT64
问题描述想要编译一个模块,单独加载到开发板上,一次需要依赖开发板的Linux内核源码进行编译这个模块编译模块的Makefile如下:/home/beal.wu/norflash/kernel是开发板使用的内核源码路径执行make之后报错:make -C /home/beal.wu/norflash/kernel M=`pwd` modules make[1]: Entering directory '/home/beal.wu/norflash/kernel'make[2]: Enterin
2021-06-15 11:11:00 2560 1
原创 shell脚本中shift的用法
用法解释:shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)。示例1:依次读取输入的参数并打印参数个数:从上可知 shift(shift 1) 命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。同理,shift n后,前n位参数都会被销毁,例如示例2示例2运行结果:示例3:命令行参数处理./imx6mksdboot.sh -dev
2021-05-30 18:01:55 13823
原创 shell脚本中seq命令
seq 用于生成从一个数到另一个数之间的所有整数。#seq 1 5 生成数字1到512345用法:seq [选项]… 尾数 或:seq [选项]… 首数 尾数 或:seq [选项]… 首数 增量 尾数选项: -f, --format=FORMAT use printf style floating-point FORMAT -s, --separator=STRING use STRING to separate numbers (default: \n)-w,
2021-05-30 15:16:42 3360
原创 shell 中 [-eq] [-ne] [-gt] [-lt] [ge] [le]
-eq //等于-ne //不等于-gt //大于-lt //小于ge //大于等于le //小于等于
2021-05-30 14:21:17 1113
原创 字符设备驱动之输入子系统按键驱动
注:代码都有完整的注释,方便阅读开发环境: ubuntu18.04平台: JZ2440kernel: Linux-3.4.2交叉编译工具: arm-linux-gcc-4.4.3驱动代码如下:#include <linux/version.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/interrupt.h>#include <linux/irq.h>
2021-01-26 22:35:17 1315
原创 字符设备驱动之内核定时器防抖
注:代码有完整的注释,方便阅读开发环境: ubuntu18.04平台: JZ2440kernel: Linux-3.4.2交叉编译工具: arm-linux-gcc-4.4.3驱动程序如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/dela
2021-01-26 22:31:34 1262
原创 字符设备驱动之同步互斥阻塞
注:代码有完整的注释,方便阅读开发环境: ubuntu18.04平台: JZ2440kernel: Linux-3.4.2交叉编译工具: arm-linux-gcc-4.4.3驱动程序如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/dela
2021-01-26 22:29:56 1278
原创 字符设备驱动之异步通知
注:代码有完整的注释,方便阅读开发环境: ubuntu18.04平台: JZ2440kernel: Linux-3.4.2交叉编译工具: arm-linux-gcc-4.4.3驱动程序如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/dela
2021-01-26 22:29:30 1287
原创 字符设备驱动之poll机制
注:代码都有完整的注释,方便阅读开发环境: ubuntu18.04平台: JZ2440kernel: Linux-3.4.2交叉编译工具: arm-linux-gcc-4.4.3驱动程序如下#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/dela
2021-01-26 22:28:28 1309
原创 字符设备驱动之中断方式的按键驱动
注:代码都有完整的注释,方便阅读驱动程序如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <asm/irq.h>#include <asm/io.
2021-01-26 22:27:24 1312
原创 字符设备驱动之查询方式的按键驱动
驱动程序如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <asm/irq.h>#include <asm/io.h>#include &l
2021-01-26 22:22:39 1345
原创 字符设备驱动之LED驱动
本次使用register_chrdev_region来注册设备号驱动代码如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <asm/irq.h>#inc
2021-01-26 22:19:47 1427
原创 第六天之重载重写重定义
函数重载必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用函数重写必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)多态是在运行期间根据具体对象的类型决定函数调用实例:#define _CRT_SECURE_NO_WAR...
2021-01-26 09:10:13 1198
原创 Linux开发板上的文件系统为只读和自动设置开发板IP的处理方法
Linux开发板上的文件系统为只读修改文件时提示 Read-only file system解决办法:执行mount -o remount rw /执行完上一条命令后,到~下,删除.viminform -rf .viminfo自动设置开发板IP的处理方法手动设置ifconfig eth0 192.168.16.10 netmask 255.255.255.0 up 开发板设置IP地址自动设置修改vi /etc/init.d/rcS文件,增加一句ifconfig eth0 192.168
2020-12-11 15:40:24 1860
原创 Linux开发板使用NFS服务挂载虚拟机文件夹实现数据传输上注意事项
安装 nfs 软件1、配置网络 (必须可以上网)2、sudo apt-get install nfs-kernel-server 安装 nfs 服务端3、dpkg -s nfs-kernel-server 软件是否安装4、mkdir /rootfs ; touch a.c配置 nfs$ sudo vi /etc/export/rootfs (rw,sync,no_subtree_check,no_root_squash)在最末尾 添加 一行。**注意号要紧挨着括号,否则在开发板上修改不了文件
2020-12-11 15:31:35 658
原创 arm开发板通过nfs服务挂在在虚拟机中发生错误failed: Permission denied
问题描述:在ubuntu16.04中安装完nfs服务之后,修改/etc/exports配置文件如下:/home/beal.wu/nfs 192.168.16.1*(rw,sync,no_subtree_check,no_root_squash)我的开发板的ip是192.168.16.10,虚拟机中的ubuntu16.04的ip是192.168.16.88之后再开发板中执行mount操作:mount -t nfs 192.168.16.88:/home/beal.wu/nfs /mnt -o nolo
2020-08-21 15:08:47 2155
原创 汇编指令ldr str stm ldm
ldr命令:把数据从内存加载到寄存器ldr r0, =addr ;r0 = addrldr r1, [r0] ; r1 = *r0ldr r1, [r0, #4] ; r1 = *(r0+4)ldr r1, [r0, #4] ! ; r1 = *(r0+4);r0=r0+4;ldr r1, [r0], #4 ; r1 = *(r0);r0=r0+4;str命令:把数据从寄存器保存到内存str r1, [r0] ; *r0 = r1 str r1, [r0, #4] ; *(r0+4)
2020-08-16 15:39:37 1848
原创 加载驱动时报错sysfs: cannot create duplicate filename ‘/class/second_drv‘
JZ2440在加载驱动的时候报错,如下错误原因:在/sys/class目录下已经存在了相同的second_drv文件,所以报错。只需要在驱动中 seconddrv_class = class_create(THIS_MODULE, DEV_NAME);//创建一个seconddrv类更改一下DEV_NAME这个宏就可以了...
2020-08-16 12:30:25 4372
原创 驱动名、设备名和设备文件名的关系
编写一个驱动文件的时候生成一个name1.ko文件,这个name1就是驱动名,使用insmod name1.ko指令之后,用lsmod能看见一个名为name1的驱动在调用了alloc_chrdev_region函数或register_chrdev_region函数时传入的最后一个参数为设备名,如果传入的为name2,则表示该设备名为name2,使用cat /proc/devices指令可以看到该设备名使用mknod指令指定的文件名为设备文件名,该名字为使用open函数时打开的文件设备节点被创建在/de
2020-08-10 22:18:30 2255 2
原创 嵌入式应用程序_Qt控制jz2440开发板LED灯
前面我们进行了Qt在Linux端的移植,今天进行Qt程序控制开发板的led灯我是在ubuntu18.04环境中进行开发的,首先打开ubuntu18.04中的qt creator程序,创建一个工程widget.ui文件widget.h文件widget.cpp文件#include "widget.h"#include "ui_widget.h"#include <QPaint...
2020-04-12 19:46:05 2430 3
原创 JZ2440移植Qt5.6笔记
编译Embeded Qt5.6使用的平台时ubuntu18.04,交叉编译环境时4.4.3依赖库安装:sudo apt-get install qt5*-devsudo apt-get install qtbase5-devsudo apt-get install qtdeclarative5-dev qml-module-qtquick-controls先提前安装好tslib库注意...
2020-04-02 21:36:26 1304
原创 安装arm-linux-gcc-4.4.3
安装arm-linux-gcc-4.4.31、下载交叉编译工具交叉编译工具包可以去以下网址下载:arm-linux-gcc-4.4.3.tar.gz2、解压下载交叉编译工具到根目录下(或者自己其他路径,但是自己要记住,方便后面配置.bashrc环境变量):sudo tar zxvf arm-linux-gcc-4.4.3.tar.gz -C /然后进入:/opt/FriendlyAR...
2020-03-30 13:57:12 1377
原创 Qt_第五天_线程画图
线程画图流程图widget.ui文件widget.h#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include "mythread.h"#include <QThread>namespace Ui {class Widget;}class Widget : public QWidget...
2020-03-21 16:11:04 859
原创 Qt_第五天_线程
Qt4的用法:myWidget.uimywidget.h#ifndef MYWIDGET_H#define MYWIDGET_H#include <QWidget>#include <QTimer> //定时器头文件#include "mythread.h"//线程头文件namespace Ui {class MyWidget;}class...
2020-03-21 10:55:51 473
原创 Qt_第四天_Qt下的UDP通信
UDPLinux下的UDP通信过程:Qt下的UDP通信过程:使用Qt提供的QUdpSocket进行UDP通信。在UDP方式下,客户端并不与服务器建立连接,它只负责调用发送函数向服务器发送数据。类似的服务器也不从客户端接收连接,只负责调用接收函数,等待来自客户端的数据的到达。在UDP通信中,服务器端和客户端的概念已经显得有些淡化,两部分做的工作都大致相同:1)创建套接字2)绑定套接字...
2020-03-20 10:37:26 806
原创 Qt_第四天_Qt下的TCP通信
Socket通信Qt中提供的所有的Socket类都是非阻塞的。Qt中常用的用于socket通信的套接字类:QTcpServer用于TCP/IP通信, 作为服务器端套接字使用QTcpSocket用于TCP/IP通信,作为客户端套接字使用。QUdpSocket用于UDP通信,服务器,客户端均使用此套接字。Linux下的TCP通信:Qt下的TCP通信:...
2020-03-20 09:33:01 693
原创 Qt_第三天_绘图事件_文件系统
1、基本绘图事件先声明画家对象 在窗口设备中绘制图片 设置父窗口QPainter painter(this);父窗口自动调用paintEvent()函数2、高级绘图设置点击按键,图片移动3、绘图设备绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。其中,QPixma...
2020-02-25 21:01:18 593
原创 Qt_第三天_ 自定义组合控件_事件处理_事件分发器_事件过滤器
自定义组合控件1、添加一个类 Qt设计师界面类 .h .cpp .ui2、将两个基本的控件组合到一个容器中,提升控件 将基类的名称填写正确3、提升之后就可以使用这个控件4、封装 信号和槽 QSpinBox移动QSilder跟着移动5、对外接口 getData setData将QSpinBox和QSilder组合在一起先将QSilder和QSpinBox组合为一个控件...
2020-02-24 21:10:48 1066
原创 Qt_第二天_其他常用控件
其他常用控件1、Scroll Area2、Tool Box3、Tab Widget4、Stracked Widget栈窗口5、Combo Box下拉框部件6、Line Edit单行编辑7、Spin Box8、垂直、水平滚动条9、LabelLabel显示图片Label显示动图...
2020-02-24 17:16:39 461
原创 Qt_第二天_界面布局_控件
界面布局1、登录窗口界面2、利用widget做窗口容器,在容器中可以做水平布局、垂直布局、栅格布局3、widget中如果修改垂直大小,垂直策略改为fixed4、默认widget和控件之间有9像素的间隙5、灵活运用弹簧...
2020-02-24 09:18:40 767
原创 Qt_第二天_QMainWindow_资源文件_对话框
QMainWindow菜单栏QMenuBar * bar = MenuBar() 只能最多有一个把这个栏添加到 窗口中 setMenuBar添加菜单 addMenu(文件)文件里添加菜单项 addAction(新建) 返回QAction添加分隔符 addSeparator工具栏 可以有多个tBar = new QToolBaraddToolBar( 默认停靠位置,tBar)...
2020-02-22 21:02:26 551
原创 Qt_第一天_信号与槽机制
信号与槽的举例:点击按钮,窗口关闭 QPushButton *btn2 = new QPushButton("詹小平"); btn2->setParent(this); //默认是覆盖了第一个按钮,需要移动 /******信号与槽*******/ //点击按钮,关闭窗口 //connect进行连接 参数一:信号发送者 参数二:信号(信号地址) 参数三:信号接...
2020-02-22 17:31:01 603
原创 Qt_第一天_基本控件接口_对象树_坐标系
基本控件接口 QPushButton *btn = new QPushButton; //按钮对象 //btn->show(); //如果是show函数,默认是用顶层方式弹出窗口 //而我们预期的效果是让按钮依附于myWidget窗口中 btn->setParent(this); //显示文本 btn->setText("杨...
2020-02-22 11:47:30 524
STM32F4ADC DMA寄存器版本.zip
2020-08-12
Exynos4412资料(包括u-boot源码,uImage和文件系统)
2019-04-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人