- 博客(71)
- 资源 (5)
- 收藏
- 关注
原创 Linux文件系统:minix文件系统二进制分析4(rm删除)
系列博文Linux文件系统:minix文件系统二进制分析1Linux文件系统:minix文件系统二进制分析2Linux文件系统:minix文件系统二进制分析3(硬链接与软链接)目录结构上一章节最后保持的目录结构删除file.txt文件 rm file.txt现在的目录结构二进制dumphexdump -C /dev/sdb > chapter4.hex 二进制内容如下:00000000 00 00 00 00 00 00 00 00 00 00 00 00 00
2021-12-10 11:15:20 1461
原创 Linux文件系统:minix文件系统二进制分析3(硬链接与软链接)
文章目录硬链接与软链接当前minix文件系统目录结构创建filelevel2.txt的硬链接文件创建filelevel2.txt的软链接文件当前minix文件系统目录结构hexdump文件系统二进制分析硬链接文件技术参考硬链接与软链接当前minix文件系统目录结构 在上一章中,我们创建了minix如下的目录结构,并且进行了二进制的分析,本篇将在上一篇文章的基础上,继续对文件系统的硬链接和软链接进行二进制分析。创建filelevel2.txt的硬链接文件ln dirdemo/filelevel2
2021-12-08 21:50:42 1166 1
原创 深入剖析MMU二级页表
文章目录1. 深入剖析MMU二级页表1.1页表映射1.1.1 不同分页的情况下,虚拟地址的拆分1.1.2 粗细页表大小极小页映射图1.1.3 粗页表与细页表1.1.3.1 最小单位映射1.1.3.2 以1K为最小映射单元1.1.3.3 以4K为最小映射单元1.2 为何要用到二级页表?1. 深入剖析MMU二级页表 如果使用页面映射的方式,段映射表就变成了一级映射表(First Level table,在linux内核中成为PGD),其表项提供的不再是物理段地址,而是二级页表的基地址。32bit虚拟地
2021-12-08 10:54:01 1670 1
原创 深入剖析MMU段映射
文章目录深入剖析MMU段映射1. MMU和页表1.1 MMU1.2 页表1.2.1 一级描述符2. 完成虚拟地址到物理地址的段映射2.1 页表基地址寄存器2.2 一级描述符所在的物理地址2.3 完成虚拟地址到物理地址的段映射2.4 再补充一张段映射的系统框图深入剖析MMU段映射 在ARM32中,MMU主要完成虚拟地址到物理地址的映射,并且能够控制内存的访问权限,而页表是实现上述功能的主要手段。页表又分为一级页表、二级页表,在ARM64中甚至还有三级页表。为了便于理解,本章主要讲述一级页表完成段映射的详
2021-12-08 10:51:28 1458 3
原创 Linux文件系统:minix文件系统二进制分析2
文章目录前言创建目录和文件hexdump硬盘为16进制文本二进制分析超级块s_state属性inode bitmapdata block bitmapinode表根目录inode节点第二个inode节点依次类推file.txt文件技术参考前言 在上一篇文章里,我们对一个刚刚格式化后的minix硬盘的各个属性模块进行了二进制分析,但遗憾的是刚刚格式化的硬盘里并没有任何文件,所以对文件在硬盘里的存储不免还是有些抽象,因此补充本篇文章,让我们深刻理解文件和目录是如何在存储介质中存储的创建目录和文件 首
2021-12-05 11:40:02 1438
原创 手把手教你在Linux内核中添加一个系统调用
文章目录实现一个专属系统调用实现专属系统调用实现系统调用谈一谈SYSCALL_DEFINE2宏将专属系统调用添加到Linux内核修改arch/arm/kernel/calls.S文件CALL宏的第一次声明CALL宏的第二次声明与sys_call_table数组修改sys_ni.c修改include/linux/syscalls.h修改arch/arm/include/asm/unistd.hC应用程序使用系统调用通过syscall函数访问sys_pang运行汇编程序使用系统调用通过swi指令陷入内核态编译链
2021-12-04 20:44:53 1660
原创 Linux文件系统:minix文件系统二进制分析1(格式化)
文章目录minix文件系统二进制分析1:刚刚格式化后的文件系统创建硬盘添加一个16M的块设备格式化块设备minix文件系统的存储结构超级块linux中超级块数据结构inode节点内核数据结构万物之源No1节点—根目录第一个数据块技术参考minix文件系统二进制分析1:刚刚格式化后的文件系统 工作几年来,用过不少文件系统,甚至手把手移植和裁剪过Fatfs文件系统,但是却对文件系统内部的存储方式和玩儿法一直一无所知,正巧最近翻阅Linux0.12源码注释这本书,里面专门为文件系统章节写了100余页,不过
2021-12-04 09:12:58 848
原创 task_struct结构体的优先级参数详解:prio、static_prio、normal_prio、rt_priority
文章目录task_struct 结构体prio 调度优先级normal_prio 正常优先级static_prio 静态优先级rt_priority 实时优先级应用编程修改调度策略SCHED_NORMAL CFS调度策略SCHED_FIFO 和 SCHED_RR 实时调度策略相关的系统调用获取优先级范围sched_get_priority_min(int policy) 获取优先级最小值sched_get_priority_max(int policy) 获取优先级最大值policy传参修改线程的调度策略i
2021-12-03 22:10:30 2153
原创 ZYQN7000系列VxWorks驱动开发:添加SD和文件系统组件
文章目录测试sd卡是否挂载上添加组件DRV_ZYNQ_SDHC_CTRL添加组件DRV_SDSTORAGE_CARD添加组件INCLUDE_DOSFS上电测试修改设备树sd卡节点测试sd卡是否挂载上添加组件DRV_ZYNQ_SDHC_CTRL添加组件DRV_SDSTORAGE_CARD添加组件INCLUDE_DOSFS上电测试修改设备树sd卡节点修改之前 sdhc0: sdhc@e0100000 { compatible
2021-11-28 19:59:40 996
原创 ZYQN7000系列VxWorks驱动开发:调试GPIO子系统
文章目录使用VxWorks的GPIO子系统1.设备树文件2.gpio子系统2.1风河BSP所作的工作2.2第三方开发者要做的工作2.3添加gpio驱动3.调试gpio驱动3.1分析vxbFdtZynq7kMiscCfg.c3.2分析vxbFdtZynqGpio.c3.3修改gpio设备树节点4.测试gpio使用VxWorks的GPIO子系统1.设备树文件 接下来要为领航者开发板添加设备树文件,新建zynq-navigator.dts文件,此时根节点下没有任何设备节点,接下来的工作就是把我们所有的设备
2021-11-28 19:53:24 2402
原创 ZYQN7000系列:使用hsi工具完成hdf到bitstream的转换
文章目录hdf文件生成bitsource 执行petalinux的setting.sh脚本输入hsi进入hdf文件所在目录open_hw_design hdf文件生成bit成功hdf文件生成bit .bit 文件是 zynq pl 端所需要用到的 bitstream 文件,例如我们使用 petalinux-build命令完成工程编译之后会在 images/linux 目录会产生一个 system.bit 文件,这个就是我们这里说到 bitstream 文件,.bit 可以通过.hdf 硬件描述符文
2021-11-28 10:13:14 937
原创 ZYQN7000系列VxWorks驱动开发:VxWorks系统移植
文章目录ZYQN7000驱动开发:VxWorks系统移植1.硬件环境2.编译vsb和vip工程2.1修改设备树文件2.2添加调试打印组件3.选择uboot来启动VxWorks内核4.尝试在开发板上启动内核4.1 拷贝镜像和设备树至SD卡4.2开发板上电4.2.1 uboot成功启动4.2.2 启动VxWorks5.添加shell和cmd组件ZYQN7000驱动开发:VxWorks系统移植1.硬件环境正点原子领航者开发板2.编译vsb和vip工程vsb和vip工程的编译过程可以参考之前的文章,htt
2021-11-27 22:57:40 3797 2
原创 VxWorks驱动开发:添加网卡驱动
文章目录添加ftp服务器组件添加ping命令添加ifconfigftp连接失败设备ftp挂接的目录为SD卡分区0添加ipAttach只有一个网卡手动添加第二个网卡ipAttach 2,"cpsw"ifconfig "cpsw1 inet 192.168.2.31 up"添加ftp服务器组件添加ping命令添加ifconfig添加ifconfigftp连接失败设备ftp挂接的目录为SD卡分区0添加ipAttach只有一个网卡手动添加第二个网卡ipAttach 2,“cps
2021-11-18 22:14:39 2285
原创 VxWorks驱动开发:SDIO驱动和文件系统
文章目录添加SDIO驱动相关组件添加SD卡驱动相关的组件添加EMMC驱动组件上电运行VxWorks支持的文件系统rawFS文件系统添加dosFS组件添加SDIO驱动相关组件添加SD卡驱动相关的组件 使能上述4个组件,根据这四个组件名字可以大致推测出: DRV_TI_MMCHS_CTRL组件和具体的处理器有关,也就是SDIO驱动部分 DRV_SDSTORAGE_CARD组件和SDIO协议有关,和处理器无关,它仅仅是个协议 DRV_GPIO_FDT_OMAP组件还是和处理器有关
2021-11-18 20:17:47 2105
原创 VxWorks驱动开发:添加shell组件
文章目录添加Shell组件添加CMD组件添加Shell组件https://blog.csdn.net/weixin_42314225/article/details/120918480文章最后VxWork虽然启动,但是并没有进入shell,这是因为默认的VIP工程里并没有添加shell组件,需要我们自己添加。添加完shell组建后,该文件发生了变化添加CMD组件C解释器有了,但是不能进入cmd模式,这需要我们继续添加CMD组件...
2021-10-23 11:37:22 1064
原创 VxWorks驱动开发:编译并启动AM57xx的VxBL
文章目录用于启动VxWorks的VxBL生成与移植生成AM57xx的VxBL编译VxBL拷贝MLO至SD卡,上电运行需要修改代码D:\WindRiver4.0_SR0640\vxworks-7\pkgs_v2\os\board\ti\ti_sitara_a15-2.0.4.0\_bootloader\vxbl\ti_am572x.h加载启动VxWorks用于启动VxWorks的VxBL生成与移植VxWorks内核也可以通过uboot来启动,但风河还是提供了自己的Bootloader,名为VxBL,和QN
2021-10-23 11:15:45 988 1
原创 ARM64中的ASID地址空间标识符
文章目录1. ARM32至ARM64的蜕变1.1 ARM32的TLB机制1.2 ASID(地址空间标识符)1.2.1 ARM32的TTBR0寄存器格式1.2.2 ARM64的TTBR0寄存器格式ARM64的TLB机制1. ARM32至ARM64的蜕变 从ARM32到ARM64不止将处理器从32位升级到了64位,还有许多性能的技术也得到了极大的提升,光是个头长了可不行啊!能耐也得跟着长啊!哈哈哈1.1 ARM32的TLB机制 如上图所示,上一讲我们讲了TLB的每一条表项都有一个bit用来表示自己
2021-09-09 22:32:55 1885
原创 MMU内存管理单元之TLB快表
文章目录1. TLB快表1.1 MMU的cache ——TLB1.2 快速上下文切换FSCE1.3 Global TLB和non-global1. TLB快表 页表以数据结构的方式存放在DDR中,假如cpu每做一次地址访问,都要去DDR里去取出1级描述符,然后解析1级描述符,再去查找2级描述符,解析2级描述符,加上偏移得到物理地址,那真是太慢了1.1 MMU的cache ——TLB TLB的全称是Translation Lookaside Buffer,我们知道,处理器在取指或者执行访问memo
2021-09-01 23:06:09 2965
原创 IPL与Startup
文章目录简介IPL的作用Startup充当的角色Startup的职责复制并解压镜像配置硬件决定系统配置建立callouts启动OSstartup库在本章中,我们将从整体来看构建一个完整的QNX嵌入式系统所需要的关键步骤。首先,我们将看到QNX中微子系统需要做什么才能运行。然后,我们将看看这些组件以及它们是如何运作的。最后,我们将概述自定义某些部分时可能需要遵循的步骤简介从软件的角度来看,系统启动时会执行以下步骤:处理器在重置向量处开始执行。IPL (Initial Program Loader)
2021-08-30 21:35:47 1003
原创 QNX操作系统简述
文章目录QNX Neutrino实时操作系统的原理微内核架构真正的内核系统进程系统进程vs用户编写的进程设备驱动进程间通信消息传递QNX Neutrino实时操作系统的原理 QNX Neutrino RTOS的主要目标是以一种健壮的、可扩展的形式提供开放系统POSIX API,适用于广泛的系统——从微小的、资源受限的嵌入式系统到高端分布式计算环境。该操作系统支持多个处理器架构,如x86和ARM。对于关键的应用程序,健壮的架构也是基础,因此操作系统灵活和完整地使用MMU硬件。微内核架构 流行语常常
2021-08-17 00:27:27 5185
原创 Linux设备树源码分析chapter1:内核自解压阶段
文章目录内核自解压阶段宏定义CONFIG_ARM_APPENDED_DTB宏定义CONFIG_ARM_ATAG_DTB_COMPAT内核自解压阶段该阶段与设备树有关的代码只是为了适配低版本没有设备树功能的uboot,高版本的uboot是不需要在这个阶段做与设备树相关的操作的源文件arch\arm\boot\compressed\head.S如果你使用的uboot和kernel版本相对较新(均支持设备树),那么内核自解压部分所做的工作和设备树毫无关系,but,but,but,如果你正在使用的uboo
2021-06-24 23:46:23 580 1
原创 windows环境下使用VisualStudio2017开发Linux驱动
文章目录windows环境下使用VisualStudio2017开发Linux驱动准备工作安装虚拟机和一种Linux发行版安装VisualStudio2017安装VisualGdb开始创建VS工程编译工程修改MakefileVS2017字符设备驱动工程windows环境下使用VisualStudio2017开发Linux驱动最近在玩正点原子的Linux开发板,在教程里原子哥别出心裁,在Ubuntu下使用VSCode阅读和编辑Linux源码,这相对于较早的在Windows下使用SourceInsignt
2020-06-14 23:07:13 1208
原创 GPIO中断响应延迟现象的解决办法
GPIO中断响应延迟现象的解决办法因为GPIO中断需要外部给它一个电平信号,所以在设置GPIO属性的时候要先将该GPIO引脚设置为输入模式,有些高端的处理器还可以设置GPIO输入的防抖动时延,为了防止外部环境复杂导致GPIO引脚电平突然被拉低或者拉高,一般需要设置一下防抖动处理,所以IO中断触发就回有延时,这个抖动延时的值如果设置的过大,就回过度影响IO中断的响应时间...
2020-04-04 10:50:18 2502
原创 TI处理器EDMA的三种触发方式与通道
文章目录EDMA的三种触发方式与通道EDMA触发方式手动触发事件触发链接触发EDMA通道何为EDMA通道?EDMA的三种触发方式与通道目的:减轻CPU工作量,提高CPU效率EDMA触发方式TI公司处理器的EDMA一共有3种触发方式,在这里以外设SPI为例,发送可使用手动触发或者事件触发,SPI接收使用的是事件触发 +链接触发,对于接受来说手动触发方式是搞不定的,这是为什么呢?在开始之前,我...
2020-02-15 18:41:34 1803
原创 C/C++数据存储之float和double在内存中的存储方式
文章目录float和double在内存中的存储方式float数据类型在内存中的存储double数据类型在内存中的存储总结float和double在内存中的存储方式说来惭愧,工作那么多年,对于float和double浮点数在内存中的存储方式一直迷迷糊糊,今日闲暇,干脆一口气将之前模糊不清的地方一次性扫荡掉float数据类型在内存中的存储无论是单精度还是双精度,在内存存储中都分为3个部分:...
2019-08-18 22:52:08 1275
原创 C# 改变工具栏中图标的大小
工具栏中图标的默认大小为1616,如果想更改为大图标,在网上找了半天也没找到方法,经本人不懈的努力,终于摸索出来了。其实在C#中的工具栏控件有一个属性ImageScalingSize,就是设置图标大小的,默认为(16,16),如果想使用大图标,例如3232,只需要将该属性改为(32,32)的即可。...
2019-08-07 00:46:29 3309 1
原创 C# WPF主窗口调用子窗口,并将子窗口数据返回给主窗体
有时,上位机的功能越多,一个主界面可能包容不下,这就需要将一些功能单独做一个窗口,这也是考虑到可移植性,比如,现在我的上位机需要一个设置CAN参数的界面,如下图请注意,我一共使用了2个Button,点击”取消“按钮,将关闭该界面,点击”连接“按钮,该界面将数据保存并返回给主界面将”取消“按键的属性”DialogResult“值设为”Canael“,将”连接“对应的该属性值设置为”OK“主程...
2019-08-07 00:44:43 5043
原创 C#中将一块数据内存强制转换为Struct结构体类型
习惯了C和C++中的简单 直接 暴力的强制类型转换,过度到C#这种更加高级的语言中有些不适应啊,高级语言带来好处的同时(比如GC机制)也带来了一些不方便的特性,比如PC端使用串口向我发了一包完整的结构体数据,我使用C#所做的上位机将数据都接受下来了,但解析数据是个很麻烦的过程,尤其是数据量大的时候,此时不禁想起如果C# 能够向C或C++一样强转一块内存为结构体类型该多好文章目录添加引用命...
2019-08-07 00:38:53 2225 1
原创 使用VisualStudio2017开发嵌入式Linux应用程序
曾几何时,在开发嵌入式Linux时,先在PC上安装一个Ubuntu虚拟机,然后桥接网络,安装Vmwaretools,设置共享文件夹或者配置ftp服务器来实现PC和Ubuntu的文件交换…,改代码在Windows下改,然后拷贝到Ubuntu中去编译,真的是一波操作猛如虎啊,自从有了Visual Gdb,开始慢慢将Linux上的应用开发从之前的Vim加Makefile编译移植Windows平台下的宇宙...
2019-07-19 12:01:42 4122
原创 Ubuntu18 64位安装arm-linux-gcc
Ubuntu18.04 64位下运行32编译器缺少相应的库文件,运行时会报错运行下面加载库文件的命令:apt-get install lib32ncurses5 lib32z1安装完成再试一遍
2019-05-20 14:54:53 1009
原创 Ubuntu18.04搭建ssh服务器
Ubuntu安装后默认只有ssh客户端,即只能在Ubuntu内去连接其他ssh服务器,若想实现我们的Ubuntu被其他主机远程连接,则需要自己去安装ssh服务端。进入Ubuntu18.04,打开终端,su进入root,输入命令:sudo apt install openssh-server点击Connect连接Ubuntu,但是这时候出现了下图对话框告诉我们用户名或者密码错误但是roo...
2019-05-20 01:29:25 6278 1
原创 WIN10下VMWare14虚拟机无法桥接问题的解决
犹记得一年前我第一次在WIN10电脑上安装VMWare虚拟机,当时的VMWare版本是14,无论我怎么折腾都桥接不成功,无休止的尝试网上的各种办法都没有解决,直到今天,我下载了最新的VMWare15,然后桥接就成功了,真是醉了...
2019-05-20 00:44:09 834
原创 Git推送本地代码至GitHub详细操作
文章目录配置ssh Key产生本地ssh Key添加ssh Key至GitHubGitHub同步新建仓库克隆GitHub仓库至本地推送代码至GitHub配置ssh Key产生本地ssh Key在windows下查看[c盘->用户->自己的用户名->.ssh]下是否有id_rsa、id_rsa.pub文件,如果没有需要手动生成。输入ssh-keygen -t rsa -C...
2019-01-24 16:25:00 3796
原创 pyQt实战笔记第1篇 Win10系统PyQt5 开发环境搭建
文章目录安装python3安装PyQt5和PyQt5-tools测试是否安装成功安装python3首先登陆python官网<u>https://www.python.org/downloads/release/python-372/</u>下载python安装程序。安装PyQt5和PyQt5-tools由于并未添加Scripts目录至环境变量,所以pip3命...
2019-01-19 02:02:39 341
原创 Lua实战笔记第4篇 NotePad++ 运行Lua脚本
NotePad++ 运行Lua脚本NotePad++ 运行Lua脚本 登陆Lua官网下载资源 运行Lua解释器 配置Notepad++编辑器 登陆Lua官网下载资源单击“get a binary”运行Lua解释器解压压缩包随便拷贝一个lua脚本文件至该目录下,并在当前目录打开Bash控制台执行该脚本脚本正常运行配置Notepad++编辑器打开Notep...
2019-01-12 16:49:12 5466
原创 Lua实战笔记第3篇 Qt调用lua动态链接库
Qt调用Lua动态链接库上一篇笔记讲解了如何在VS2017下使用C++调用Lua动态链接库,因笔者平时也喜欢使用Qt,故创作本篇记录Qt是如何调用Lua Dll协助我们工作的新建Qt工程 这是创建好的Qt Console工程 将Lua5.1源码目录“src”拷贝至Qt工程目录下,如下图所示 在Qt中打开LearnLua.pro文件,将“INCLUDEPATH...
2019-01-12 14:47:02 1606 1
原创 VS2017生成静态链接库并被C++调用
生成静态链接库新建C++ 静态库工程 新建水果Fruit类 在Fruit构造函数里添加一句打印函数,方便我们后续验证 生成后到工程目录下的Debug目录下查看生成的.lib文件 调用静态链接库新建C++控制台工程 将lib文件的相对路径填入“附加库目录”,这样编译时编译器就可以找到lib所在目录了第一种调用方法第一种方法,直接在.c文件中声明...
2019-01-12 12:37:59 1274
原创 树莓派学习笔记第二篇: 树莓派3B+ 安装Qt
sudo apt-get update #更新软件源sudo apt-get dist-upgrade #更新软件sudo rpi-update更新内核和固件sudo apt-get install qt5-defaultsudo apt-get install qtcreator在安装过程中很有可能会失败,没关系,只要重复输入当前执行的命令即可,多试几次就成功了...
2019-01-12 10:46:41 509
VS2017 Linux字符设备驱动工程
2020-06-14
AM5728 .out文件转bin文件的上位机工具(附带C#源码).zip
2020-03-27
该模块作为C#操作Excel的基类使用
2018-10-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人