疑难问题和经验积累
记录在学习工作过程中的一些错误或者问题以及解决方法
李嘉图Y
凡是过往,皆为序章
展开
-
驱动程序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 · 1880 阅读 · 0 评论 -
ubuntu16.04 Server版本固定IP地址
1、打开/etc/network/interfaces2、进行下面修改*原创 2021-11-04 16:59:14 · 998 阅读 · 0 评论 -
char* buf和char buf[64],定义两种字符串作为参数传递给函数的区别
问题描述:最近在项目中遇到了一个让人疑惑的问题,有一个发送函数需要传递void*类型的参数,我定义了char *buf = “abcdefg”;然后将buf作为参数传递给了这个发送函数,但是函数返回值显示发送成功,但是另一端没有接收到数据。查找了好久,最终我将char *buf = “abcdefg”,改为char buf[64] = “abcdefg”;然后再次传输,结果传输成功。总结:以后遇到这种情况可以直接分配具体的数组空间。...原创 2021-06-23 09:52:34 · 5155 阅读 · 0 评论 -
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 · 2410 阅读 · 0 评论 -
加载或卸载驱动时报错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 · 2722 阅读 · 0 评论 -
依赖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 · 2533 阅读 · 1 评论 -
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 · 1842 阅读 · 0 评论 -
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 · 652 阅读 · 0 评论 -
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 · 2141 阅读 · 0 评论 -
汇编指令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 · 1830 阅读 · 0 评论 -
加载驱动时报错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 · 4298 阅读 · 0 评论