自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (7)
  • 收藏
  • 关注

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (14-19)设备树相关

这样内核打开相关驱动文件之后,驱动读取设备树文件dtsi就知道SPI总线用的是40Mhz的时钟晶振,spi 的sclk 20MHZ,中断,读是哪个IO口。总而言之,PCB 软件用画原理图来表明这个设备的情况,设备树是通过语言的方式描叙硬件的状态。具体设备树怎么写一般下载内核后在DOCUMENT下面查找各个内核的设备树,照说明写。这个系列没有说中断,DMA,SPI,UART,IIC等,也没说网络设备和块设备。要自己写驱动,写好设备树之后让自己的驱动读取它来工作,可以看看视频了解。视频里面的代码那些都不放了。

2026-08-06 16:01:04 235

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (12)(13)IOCTL

关于这个unlocked_ioctl 以及它和早期的linux 内核中的ioctl() 见其他大佬的说明。ioctl,字面意思是输入输出控制,lesson12 里面对这个玩意的作用说了个清除,超越常规的r/w/open/close 操作之外,设备文件有时候需要更多的参数来配置控制。lesson12 复制的是lesson8/9的代码,给了cdev_init(&my_cdev,&fops) 中fops 添加。总体看都是比较浅显的说明了linux 内核里面字符设备的各种常用概念。头文件my_ioctl.h。

2026-08-05 16:18:23 189

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (11)kmalloc 动态内存分配和struct file中的私有数据

malloc/free 在c 里面很常见的成对出现,用于申请内存空间和释放内存空间,这里的kmalloc/free 成对出现在open/release 里面。然后read/write 函数里面就是copy_to_user()/user_to_copy()。不看视频,直接看这个程序,能理解这个程序是注册了一个字符设备文件,打开字符设备文件就会申请下一段64bit(MEMSIZE)内存空间,从外部用户层给内存空间读写数据,就会对这段内存空间进行读写。

2026-08-05 11:04:57 77

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (10)auto_devfile

在linux 驱动中创建设备文件

2026-08-04 12:27:07 217

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (9)manual_cdev

register_chrdev_region 需要配置主/副设备号,这里用的 STATIC_DEVNR ,MINORMASK+1 来注册字符设备 hello_cdev。不过这节系统内核添加hello_cdev这个设备驱动之后还是要mknod 创建字符设备 mknod /dev/hello0 c 236 0。这样系统内核就添加字符设备,在 /proc/dev/中可以看到字符设备 hello_cdev,主设备号是dev_nr。全局变量my_cdev 的所有者是这个模块,这样就将hello_cdev 接上了。

2026-08-03 17:13:55 232

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (7)open,release (8) write read

两个程序都写完了,视频开始编译驱动程序,insmod之后,mknod /dev/hello0 从236 0;最后在应用层跑测试,分别做这两个字符设备,打印不同的次设备号,不同模式,表明测试程序成功。这几个课程加起来就是对字符设备常用的操作开,关,读,写的操作,构成了字符设备的开发架构。我认为字符设备其实都可以理解为在这个架构上开发的。和lesson5 对比,十分类似,lesson5 只实例化了.read 读,这里有实例化.open/.release,视频开始的9分钟对于设备文件这些做了相关说明。

2026-07-29 16:25:12 213

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》(5) hello_cdev (6) log_level

fs.h中的读是ssize_t (*read) (struct file *, char __user *, size_t, loff_t *),例子里面是my_read(struct file *f, char __user *u, size_t l, loff_t *o),可见参数是可以重写的;lesson6 printk 的各种报告等级。学过stme32单片机的,可以理解为<linux/fs.h>中这个函数是_weak ,hello_cdev.c重写这个函数重新定义了它。lesson6 代码略过。

2026-07-28 20:47:58 218

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》(4) devicefile 设备号相关

在 Linux 中一切设备都是文件,系统用文件的开关读写抽象了设备的操作,所以 <linux/fs.h> 中的 file_operation 至关重要。查看 Linux 系统的 /dev/ 文件夹,查看设备文件和文本文件的不同。实际上 /dev/ 下的设备文件大多都是虚拟文件,关闭树莓派之后,PC 查 SD 卡可以看到 /dev/ 文件夹大多是空的。举例 /dev/gpiochip0 的主设备号 254,次设备号 0。Linux 内核驱动和设备是通过设备号来联系的,不是通过设备的名字。

2026-07-28 20:46:30 239

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》(3)gpio ctrl

这个程序写的比较浅,说的是有两个gpio 口,gpio_desc *,这里desc 可以理解description的缩写,也就是led/button 两个IO的描述符。gpio_to_desc 函数让led/button 两个gpio_desc * 指针得到对应io口地址20/21,然后设置方向(gpiod_direction_output/gpiod_direction_input),最后读取button 答应出来,同时给led 赋值1.开发平台:Raspberry Pi 3 数莓派3。

2026-07-27 12:41:38 207

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》(2)better hello

将初始化和移除的函数添加了static 关键字,保证函数my_init() /my_exit()只能在这个hello.c文件中调用,显然安全程度高了很多。添加MODULE_AUTHOR/MODULE_DESCRIPTION 添加了模块说明,以后可以用modinfo等命令查看模块信息。这个hello.c就是最简单的linux 内核驱动模块程序了。解释了加载/移除 驱动模块 ,加载模块之后如何查看内核模块信息。添加 __init/__exit,添加的宏增加了函数可读性。学习linux 内核开发做学习笔记。

2026-07-27 12:19:25 216

原创 Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》(1)hello world

shell 表示shell 脚本,uname -r 表明系统的内核版本,/lib/modules/$(shell uname -r)/build 等于表达内核目录,相当于开发路径。所以这个命令等于 make -C /lib/modules/xxx/build M=xxx(当前目录) modules。module.h 提供内核动态加载移除,init.h 提供内核函数如何加载移除。程序最后是内核开发的MODULE_LICENSE(“GPL”).内核的许可证。all .实际的生成命令,等于make all。

2026-07-27 11:50:06 262

原创 zynq qt 交叉编译

从qt官方下载的是qt-everywhere-opensource-src-5.15.4.tar.xz。qt-everywhere-opensource-src-5.15.4.tar.xz 解压后进入qtbase/mkspecs 文件夹,新建arm-linux-gnueabihf-g++ 文件夹。Xilinx 官方是自带有qt的,petalinux-config -c rootfs 这一步里面有配置qt ,但是实际操作下来,总是报错。综合考虑之后选择从qt官网下载文件进行交叉编译。

2026-07-27 10:51:54 222

原创 petalinux spidev

xilinx s

2026-07-27 10:46:29 49

原创 解决Reset pin /xx/RESETN (associated clock /xx/CLK) is connected to asynchronous reset source /RESETN.

vivado block design 中遇到的错误,fifo 上的resetn始终出现题目中的报错, 解决办法很简单,将fifo 上的这个resetn 接到对应的port 之后,再点击port properties ,说明clock port 是哪个时钟。出现这个原因应该是因为系统无法判断resetn对应的时钟域是哪个,所以需要手动解决.

2024-09-09 10:39:53 1108

原创 vivado 的 ila 接AXI 总线一直报错

接线正确的前提下总是报错,我的时钟接的ps端的时钟线FCLK_CLK0.对jtag的频率多次调整也没效果,后来参考他人意见,重启了ps端,解决问题。重启PS端就是将vitis软件至于DEBUG状态随便烧录下就可以了。

2024-09-01 15:57:37 652

原创 VIVADO :ONLY ONE BD

工程路径有个空格(space),导致该问题发生。修改路径中的文件夹名,将路径中的空格删除,解决。

2024-08-01 17:33:09 484

原创 vivado wns 时序报警 处理

7,解决set up 的方法搜索了下,有组合逻辑流水线,降低频率等。根据这次的实际情况,选择修改约束。6,根据路径,确定这是一个组合逻辑的模块。5,检查确定报错的是setup ,双击红点,双击路径,可以看经过的cell。1,只是阐述wns报警的一种情况,不是本人这种情况的请找其他大神。4,报错的路径是intra clock ,这是一个时钟域内路径问题。2,implement 之后时序报错,wns为负数。10 跑了数次,将所有需要修订的路径修改完毕。9, 需要修的点比较多,推荐用正则表达式。

2024-07-12 15:28:27 1888

原创 ZYNQ NE10 裸机(standalone)

链接的编译条件:GitHub - rubennc91/Ne10_zynq_lib: It's a copy/fork of the Ne10 project. This is the Ne10 libraries to use it with Xilinx Zynq in baremetal.

2024-03-19 13:44:59 707

原创 zynq7000 neon 裸机编译

所以我的miscellaneous 编译选项是:-mcpu=cortex-a9 -mfpu=neon-vfpv4 -mfloat-abi=hard -Wl,-build-id=none -specs=Xilinx.spec -march=armv7-a -marm。对makefile不熟,所以自己的解决方法比较粗暴,排除了几个用不上的文件夹。zynq7000是arm-v7,所以我修改的是-march=armv7-a -marm。大家根据自己情况选择啊。最后的选项是-mfpu=neon-vfpv4。

2024-03-19 10:50:04 1675 7

原创 zynq usb 传输大小修改

1)文件xusbps_ch9_winusb.c中的XUsbPs_Ch9SetupCfgDescReply()函数,对bulk out endpoint config,bulk in endpoint config两部分中的wMaxPacketSize改成be2les(0x400)2)文件Xusbps_COMMS.c中xusb_COMMS_init()函数中,将BufSize,maxPacketSize改成1024。用原方法一次只能传输512个字节,可是需要传输更多的字节就分多次传输。

2024-03-18 10:32:01 1123 4

原创 Petalinux2022 qemu 退出

petalinux prebuilt 之后退出不了。kill 也很麻烦,在手册找到退出办法。

2023-11-09 14:22:58 333

原创 grub 启动

22.04,msi主板。出现了Minimal BASH-like line editingis supported。2)长按e键,之后就会跳出一个界面。因为我选择F10 ,直接安装系统。2 解决办法:准备好安装u盘。

2023-10-19 16:04:26 470

原创 HDL_BITS 学习(9)

verilog hdl bits 练习

2022-10-27 23:47:44 437

原创 stlink utility

用stlink utility 连接stm32f1,出现了stm32w1

2022-01-14 15:14:36 4588 7

转载 异步复位同步释放(Synchronized Asynchronous Reset)

verilog reset 中的同步,异步复位的优缺点。

2021-12-22 16:00:57 497

原创 HDLBITS 练习 卡诺图化简部分

hdlbits 卡诺图部分

2021-12-12 12:41:48 10123

原创 HDL_BITS 练习(8)

hdlbits 练习 基本门电路

2021-12-03 17:45:01 272

原创 HDL_BITS 练习(六)

veriloghdl-bits 练习 more verilog features 部分

2021-12-03 16:48:04 284

原创 HDL_BITS 练习(五)

veriloghdl-bits 练习 procedure 部分

2021-12-03 14:56:33 773

原创 HDL_BITS 练习(四)

verilog 练习网站HDLBits 自学练习,本篇练习是module:hierachy 部分

2021-11-14 23:01:27 384

原创 HDL_BITS 练习(三)

1 vector0Build a circuit that has one 3-bit input, then outputs the same vector, and also splits it into three separate 1-bit outputs. Connect outputo0to the input vector's position 0,o1to position 1, etc.三位输入,输出1个三位信号,三个一位信号o2,o1,o0module top_mo...

2021-11-13 23:17:34 706

原创 HDL_BITS练习(二)

代码练习:没有用tab键,全部4个空格符代替1 four-wires:module top_module( input a,b,c, output w,x,y,z );//only when you are certain about width of each signals assign {w,x,y,z}={a,b,b,c};endmodule2 inverter:非门hint:Verilog has separate bitwise-NOT...

2021-11-13 12:58:58 270

原创 HDL_BITS 练习(一)

HDL_BITS 练习(一)发现一个在线练习Verilog hdl的网站https://hdlbits.01xz.net/wiki/,省去了安装quartus 和xilinx相关软件的功夫,非常适合初学者。在线练习。相关的网站介绍和练习答案CSDN上就有,hdlbits 练习汇总_学渣的博客-CSDN博客_hdlbits,也可以自己百度谷歌都行。本文只是用于自己练习,不足之处不吝指教。1 basics1) simple wire大略翻译:创建分别带有输入输出wire的模...

2021-11-13 12:16:35 470

原创 CentOS7 启动报错 Centos 7: kernel panic-not syncing

昨天在vmware 虚拟机安装了CentOS 7,在yum install,makecache,update 还没有完全结束就power off 结果今天就开不了系统了。第三行显示了原因kernel panic-not syncing:VFS。。。。内核更新出问题了。只有rescue core 的system 可以用。比较简单的解决方法就是到了启动页按下行选择rescue选项的那一...

2020-03-13 21:09:05 5818

原创 keil5 开发STM32的 IRQn_Type error

用keil5环境开发STM32和keil4开发stc的C51完全不同,记下一个坑  这个IRQn_Type  error原因其实很简单,就是选择的启动文件(startup)startuo_stm32f10x_hd.s是用于高密度的,而调试的device我选择的是STM32F103C4,不匹配。解决办法:1)改device,选择高密度的芯片,如STM32F103VE 2)...

2019-01-07 20:41:34 2823

原创 ADS1115的IIC通信

帮人给移远bc芯片和ads1115通信。这里根据datasheet总结下ADS1115的IIC通信datasheet里面其实有个quick guide,比较详细的介绍了和ADS1113/4/5 IIC通信的流程.这个流程是让ADS1113/4/5能够连续的进行A/D转换并且读取结果的过程。将详解下这个流程中的步骤1.写congif register,这是为了写配置寄存器,确定ADS...

2019-01-06 12:13:15 6204 1

原创 MDK5环境下stm32软件模拟

决定写写东西记忆下。长话短说。emmm开发环境Win10,64位系统,MDK5.25目标做一个流水灯例程(不重要),进行软件模拟,调试做出波形图来验证程序是否符合预期步骤建立工程,project-&gt;new uvison project 选择芯片,这个我随便选择了个stm32f103,没有芯片的话用软件自带的pack installer在线官网装或者自己网上找pack用...

2019-01-03 20:23:27 5416

原创 android layout不成功,显示The SDK layoutlib version is not supported

原本eclipse下载的sdk19,撰写的线性布局文件在SDK19下是成功的,之后下载sdk20,21,28,在28下却显示The SDK layoutlib version is not supported。怀疑是sdk库兼容或者没有下载28配套文件。总之将sdk降到19,20,21后都成功显示activity_main.xml布局文件参考https://blog.csdn.net/...

2018-08-05 11:35:41 10903

原创 android 计算器(2)

package com.example.calculater;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import and...

2018-06-23 12:41:15 345

原创 android 计算器编写(1)

学下Android 练手。用的是eclipse adt。先写布局文件。选择新建工程之后不断enter,建立工程之后,找到自己打算编写的布局文件,路径应该是res/layout/文件名.xml,打开后开始编写。&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;LinearLayout xmlns:android="http://schemas.andr...

2018-06-23 12:29:46 987

STM32G431X6X8XB-manual.PDF

stm32g431系列官网手册

2021-05-14

串口调试助手,调试软件

串口调试助手,用于单片机的串口调试。在win7下运行正常

2018-05-01

hspice 学习资源

hspice stduy .only for learning .

2016-03-20

安卓工程建立以及新activity.doc

介绍用eclipse来简单建立一个hello world的Android app以及activity的调用的教程。 全英文。现在因为用as不用eclipse 所以不好找了。

2021-08-17

正则表达式regex静态库

概述:在xilinx vitis上裸机程序编译,亲测可用。linux系统的话没试过,不过linux自己的正则表达一般都足够了。 文件: 静态库:libregex.a; 头文件:regex.h 使用方法:和静态库用法一致,将头文件和静态库包含在工程,添加lib,源文件里面添加头文件regex.h,之后就可以调用里面的函数了。 下载不用积分,如果要积分的话就是csdn加的。

2024-03-18

X-CUBE-SPN17-V1.0.0.zip

ST 官网提供的BLDC电机开发库

2021-08-17

xilinx 2022版 linux 在线安装器

1,版本是2022的; 2,装在linux系统上,不是windows的 3,需要官网账号 4,主要是赚积分。 5,安装的话先准备150G-200GB的空间

2024-03-13

MM32移植教程基础A.zip

STM32F 系列工程移植到MM32系列的简介。就移植了一个LED。没积分的可在官网查看。

2021-08-17

GD32F1 PACKS AND MANUALS

GD32 的F1系列的DFP.pack,可以用于KEIL里面。技术文档,介绍

2021-05-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除