自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(646)
  • 资源 (32)
  • 收藏
  • 关注

原创 B样条曲线-核心思想和简要概述

也就是你画了个弧线(贝塞尔曲线和B样条曲线的目标都是平滑曲线),这个弧线上有不少的控制点,你拖一下控制点这个曲线就会发生变化。B样条曲线上的控制点就是这个意思,它和贝塞尔曲线的控制点的区别就是这个控制点影响的范围不一样,它一般只影响它周边的很小范围的曲线的形状。B样条呢就是在这些控制点之间构建曲线,也就是N个控制点对应的N-1个段,每段一个曲线。考虑到已经忘了啥是B样条曲线了,晚上还是查了一下,看了几个之后,我倒是弄明白了,但是这些文章都都是用公式描述的不清不楚,所以这里给个简要直观的介绍吧。

2024-05-15 10:49:46 252

原创 sudo 授权问题

sudo 表示 “superuser do”,它允许已验证的用户以其他用户的身份来运行命令。其他用户可以是普通用户或者超级用户。然而,大部分时候我们用它来提权运行命令,以替代直接使用 root 用户的操作。sudo 命令与安全策略配合使用,安全策略可以通过文件 /etc/sudoers 来配置。其安全策略具有高度可拓展性,支持插件扩展。默认情况下 /etc/sudoers 是不能被任何人直接编辑的,因为它的权限是 440,虽然也可以对其赋予写权限后再编辑,但推荐使用 visudo 命令编辑该文件。

2024-01-23 11:07:56 1133

转载 Linux下ARM64内核空间分布及页表查询

在调试程序的时候,特别是内核模块时,涉及到某些内存地址的测试,如查看某个地址的值是否发生变化等,如果能够知道各进程的地址分布,特别是虚拟地址和物理地址之间的映射关系,可能有助于我们的程序调试。为此,我们找了网上关于内核地址空间的相关内容。本文开发了一个内核模块用于解决上述问题,但是,本文提出的模块可用于查询内核空间及用户程序空间虚拟地址分布及属性,以及查询对应虚拟地址的物理地址,但只适用于linux-5.5以下arm64版本,在linux-5.10内核布局空间已发生较大变化。对应的github地址。

2023-11-23 15:57:12 638

转载 初识ARM处理器

一般来说再采购Arm嵌入式板卡的时候会涉及核心板和开发板。如何区分呢?核心板:CPU + 内存 + FLASH + 电源 + IO接口 等等开发板:SD卡 + 网口 + HDMI + 串口 + USB 等等开发板有时也被叫做 底板。购买商家提供的开发板会比较贵,一般前期测试会使用,后期只是购买核心板,然后自行开发底板(开发板)。

2023-11-09 17:27:03 889

转载 [保姆级教程] 如何在 Linux Kernel (V5.17.7) 中添加一个系统调用(System call)

最近在学习 《linux Kernel Development》,本书用的linux kernel 是v2.6 版本的。看完”系统调用“一节后,想尝试添加一个系统调用,然后重编一个kernel。经过几个小时的尝试,实现了这个小功能,其中也遇到了不少坑,本文主要是记录分享下如何在Linux Kernel (V5.17.7) 中添加一个系统调用(System call)。

2023-11-08 00:42:46 440

转载 Linux kernel 分析之一:内核镜像/映像

只知道把它往/boot/下一放,往boot loader的配置文件(例如grub的menu.lst)中写上相关信息,机子就顺利启动了。于是,我查看了相关资料,最直接的资料来自于arch/i386/boot/下的Makefile。我们的出发点是在CPU加电的一刹那,系统处于16位实地址模式下,终点是内核开始运行start_kernel(),系统处于32位页式寻址的保护模式下。(尽管与用户态程序相比,还要多操心不少事,包括对硬件的直接操作,内核态各种数据结构的初始化,对页表的操作等等)。

2023-11-02 10:49:09 537

原创 深度解析linux内核模块编译makefile

linux 模块编译的选项

2023-10-22 11:01:31 2128

转载 编译出错,出现 vfs_read[******.ko] undefined !

()的定义为ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos),其中,参数__user 表示buf是用户态指针,在内核中是无法使用,因此需要设置使用环境,如下(也就是说,你想直接使用vfs_read这个一句话是不行的,它要用一个代码块才能满足从文件里面读取一些字节的需求,而这个代码块主要是解决__user *buf的使用的问题。count:读的字节数,返回值是成功返回字节数,失败返回负值;

2023-10-19 18:33:56 767 1

转载 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响

1. 获取内核版本文章出处:周婷 ,软件工程师 2006 年 2 月 9 日Linux内核从 2.4版本 到 2.6版本在可装载模块机制、设备模型、一些核心 API 等方面发生较大改变。即便是当前的5.10版本的内核,其内核可装载模块的编写、编译和使用仍基本延续2.6版本内核可装载模块的方式。鉴于此,可以通过linux内核从2.4版本到2.6版本的可装载模块的编译、使用等的前后对比来进一步了解linux内核可装载模块的一些技术细节。

2023-10-18 11:46:39 149

原创 编译linux内核模块时的make -C M= modules的参数说明

注释:这个是编译linux核外模块必备的makefile中的核心语句,相当于先跳转到-C 指定的内核目录,然后执行这个目录下的makefile M=XXX modules(这个有点不好理解,一般都是在某个目录下执行makefile就行了,这里是执行makefile M=XXX modules),相当于在当前系统内核根目录下执行make M= XXX modules 进行XXX目录下的模块的编译,编译成xx.ko.这样你的modules就可以在任何其他位置,而不用必须在内核文件下面了。

2023-10-16 17:30:50 1450 1

转载 linux内核日志输出之kmsg和dmesg

proc/kmsg是专门输出内核信息的地方,为了能够方便的在 user space 读取 Kernel log,Kernel driver 里面将ring buffer映射到了 /proc 目录下的文件节点 /proc/kmsg。printk()打出的信息往往以 <0>…由于 Kernel log buffer 循环缓冲区只有一个读指针,所以当一个程序在读 buffer 的时候会不断的移动 buffer 的读指针,这样当有多个程序读取 buffer 的时候每个程序得到的log都不是完整的。

2023-10-16 16:55:47 2357

原创 Makefile中诸多等号“:=, =, ?=和+=”的区别

在Makefile语法中,时不时会见到各种“=”号的赋值语句,除了常见的“=”和“:=”,还有“?=”等,那么这些赋值等号分别表示什么含义呢?

2023-09-15 21:58:08 569

转载 C/C++中如何稳定地每隔5ms执行某个函数?

链接:https://www.zhihu.com/question/536739862/answer/2524011929。

2023-09-06 11:45:37 1330

转载 【Linux驱动】内核模块编译 —— make modules 的使用(单模块编译、多模块编译)

编译驱动一般采用的是将驱动编译成模块(.ko 文件),然后加载到内核,这其中就用到了 make modules 命令。

2023-09-05 20:29:05 1532

转载 FFmpeg 解码内存泄漏汇总,sws_getContext函数无法释放问题

av_packet_alloc 中并没有调用 av_init_packet , 但av_packet_alloc 中调用了 av_packet_unref ,而 av_packet_unref 内部才调用 av_init_packet (老版本的 ffmpeg 中 av_packet_alloc 是直接调用 av_init_packet )av_read_frame有内存泄漏风险,av_read_frame 每次循环后必须执行av_packet_unref(pkt)进行释放。内存释放要按顺序进行释放。

2023-07-06 16:12:59 1386

转载 git submodule 使用教程

使用git submodule将多个仓库关联起来的方式,类似C中的指针,引入其他仓库作为开发仓库的一个模块。

2023-06-10 06:19:43 4391

转载 UDP双向通信示例

讲解UDP通信示例

2023-06-08 03:27:16 606

转载 Linux模块文件如何编译到内核和独立编译成模块

如何将自己编写的内核模块编译成模块或者内核中

2023-06-07 16:20:13 1658

原创 自动生成cmake工程结构

使用脚本来创建通用cmake工程

2023-06-07 14:49:57 381

转载 I/O控制器及控制方式

CPU向I/O模块发出读写指令,CPU会从状态寄存器中读取I/O设备的状态,如果是忙碌状态就继续轮询检查状态,如果是已就绪,就代表I/O设备已经准备好,可以从中读取数据到CPU寄存器中,读到CPU后,CPU还要往存储器(内存)中写入数据,写完后再执行下一套指令。由于CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制,这个电子部件就是I/O控制器,又称为设备控制器。CPU和I/O设备的并行性进一步提升。

2023-06-06 15:43:17 2752

转载 数据驱动的基本原理是什么?

知识是基于信息之间的联系,总结出来的规律和方法论,主要用于回答为什么(why)和怎么做(how)的问题,在企业里的应用包括。

2023-06-02 09:32:54 1110

转载 类成员函数当回调函数的方法

普通的C++成员函数都隐含了一个“this”指针参数,当在类的非静态成员函数中访问类的非静态成员时,C++编译器通过传递一个指向对象本身的指针给其成员函数,从而能够访问类的数据成员。也就是说,即使你没有写上this指针,编译器在编译的时候自动加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。在创建线程调用回调函数时,传入类对象的指针(比如this指针)作为参数,并在回调函数中把void*强制转换为类的指针(MyClass*),就能使用该指针调用类的成员函数。

2023-05-18 15:06:44 1215

转载 图解协程原理

协程(Coroutines),是 Kotlin「最神奇」的特性,没有之一。本文会以图解 + 动画的形式解释 Kotlin 协程的原理。看完本文后,你会发现,原来协程也没有那么难。本文要求读者有一定的 Kotlin 基础。

2023-05-06 10:23:55 789

转载 什么是Zero-copy零拷贝

零拷贝 zero copy的含义以及发展过程。

2023-04-23 14:32:00 238

转载 ip rule,ip route,iptables 三者之间的关系

通过简单示例阐述ip rule,ip route,iptables 三者之间的关系

2023-03-31 17:28:28 1063

原创 交叉编译linux内核并使用qemu运行

在x86_64架构的电脑上采用交叉编译的方式对程序进行编译,并部署到arm板子上运行是我们经常会遇到的,对于依赖关系不怎么复杂的程序,直接使用gcc-arm交叉编译工具,在x86_64电脑上(安装交叉编译工具链)即可编译,编译时指定gcc的版本和相关库的路径。但是对于复杂的程序,特别是依赖大量外部库的程序,使用这种方式就不太可行了。这里还是考虑弄一个较小的arm虚拟机来跑,然后在虚拟机里面把待编译代码放进去进行编译。相对于vbox和VMware这类虚拟机,qemu显然更轻量,更简单。

2023-03-19 01:57:14 3119 1

转载 netstat命令Local Address解释

Local Address(127.0.0.1:9600) 代表只有第一个网卡(lo,只能处理目标地址是127.0.0.1或者Localhost的网络包),可以接收请求端口9600的数据包。Local Address定义了传入的连接请求(即tcp SYN数据包)将被哪个网卡接收(因为电脑上一般都有eth0和lo至少2个网卡)。Local Address (0.0.0.0:8600)代表任意一个网卡,都可以接收请求端口8600的数据包。即 B到端口8600、8024的网络是通的,到端口9600网络不通。

2023-02-28 21:25:55 1843

原创 [ERR_PACKAGE_PATH_NOT_EXPORTED]: No ‘exports‘ #相关问题解决方案

这两天在用springboot+vue进行一个系统整合时,后台程序没问题,前端用HBuilder-X导入工程功成后,执行运行--运行到终端--npm run serve时报错“package路径没有导出”,具体地是vuex这个包的问题。经过多次查找,发现可以在该工程的根目录下(含有package.json文件)运行npm update,如果还是不行就执行npm audit fix --force来解决版本混乱问题。

2023-01-15 15:27:18 2866

转载 ubuntu下搜索文件的几种方法

ubuntu下查找文件的几种方法

2023-01-03 15:01:03 9550

原创 解决CMake时的Find_Package失败问题

今天在编译组内代码时遇到了Find_package问题,具体来说就是找不到redis的库及相关头文件。针对上述问题,我们查找并安装了class_loader的开发库,上述问题就解决了。也就是继续执行cmake,又出现了问题,找不到hiredis库使用前面的方法,发现安装hiredis的开发库之后,仍然报错。然后使用whereis查找hiredis对应的头文件和库。分别在/usr/include/hiredis下面和/usr/lib/x86_64-linux-gnu下面。然后重新执行cmake,成功。

2023-01-03 14:55:58 12441

原创 使用cmake编译内核模块的几种方法

使用cmake编译内核模块的方法

2022-12-16 17:37:42 2599 1

转载 WARNING: modpost: missing MODULE_LICENSE()以及内核模块无法验证

missing MODULE_LICENSE()以及内核模块无法验证的解决方法

2022-12-09 20:11:20 4112

转载 Linux内核模块使用浮点float double运算的方法

最近我们有一个需求,需要把用户态的浮点数运算全部放到内核态运行,以提高运行速度,移植的过程中发现问题没有这么简单,然后我们抽丝剥茧,揭开 Linux 对浮点float double处理的原理。

2022-12-09 06:21:07 4338

原创 linux 下查看进程内的线程有哪些

获取进程中的线程数量的方式。

2022-12-04 22:37:44 2747

转载 进程和线程ID

其实,每个进程内的线程库生成的线程,应该算是用户态的线程,只有这些线程映射到操作系统内核所认识的线程,才能被调度。这个时候,映射到操作系统内核能识别的线程的时候,操作系统的对应线程也会有一个线程ID,这个ID在整个操作系统空间是唯一的。而在一个进程内的线程需要和另一个进程内的线程通信的时候(操作系统级别的进程间通信)才会用到,因为需要标识唯一的一个线程。如果我们使用posix线程库pthread创建线程,那每个线程的ID是谁生成的呢?另外,主线程(main)获取的进程ID==线程ID,而子线程就会不同。

2022-12-02 16:58:01 242

转载 linux驱动: 如何向模块传递参数

如何向模块传递参数,Linux kernel 提供了一个简单的框架。

2022-12-01 21:32:08 376

原创 ubuntu上配置中文的man助手

配置linux编程的中文帮助手册

2022-11-25 17:17:45 405

转载 linux 内核中 memcpy 和 memmove 函数的区别和实现

memcpy 和memmove都是把 src 指向的对象中的 size 个字符拷贝到 dest 所指向的对象中,返回指向结果对象的指针。但这两个函数在处理内存区域重叠的方式不同。

2022-11-25 11:07:55 1085

转载 Posix共享内存

1. 概述共享内存是可用IPC机制中最快的,2. mmap、munmap和msync函数mmapmmap函数把一个文件或一个Posix共享内存对象映射到调用进程的地址空间,使用该函数有三个目的:使用普通文件以提供内存映射IO使用特殊文件以提供匿名内存映射使用Posix共享内存对象以提供Posix共享内存区通常设为NULL,让内核自己决定起始地址它从被映射文件fd开头起第offset个字节处开始算,offset通常设为0,MAP_SHARED进程间共享内存需要使用MAP_SHARED。

2022-11-25 10:51:57 895 1

转载 使用互斥锁mutex进行进程间同步的说明和示例

进程间同步可以使用互斥量mutex(互斥锁)、信号量和文件锁。这里面的重要函数是pthread_mutex_init(),它负责进行互斥锁的初始化,只有初始化之后才能使用它进行加锁、解锁。这里需要说明的是,mutex不仅可以用于进程间的同步,还可以用于线程间的同步,默认情况下是线程间同步。如果要用于进程间同步,则需要在pthread_mutex_init初始化之前,修改其属性为进程间共享。pthread_mutexattr_t mattr 类型就是用于定义mutex锁的属性的。

2022-11-24 17:32:04 1586 1

cmake_tutorial-master.zip

安装自定义模块到系统中并在独立工程中使用find_package找到

2021-11-01

图解系统-暗黑风格-小林coding-v1.0.pdf

小林coding写的图解系统,非常全面的介绍了操作系统相关知识,大量的图。

2021-10-14

sensorPluginTest0916.zip

本程序是在ubuntu20.04下基于class_loader开发的一个插件,里面使用了基类、子类,在测试程序中,将子类对象赋给父类指针,然后使用父类的成员函数作为线程函数启动线程。并可以从外部传入参数到线程函数中。最后还可以生成插件以供别人使用。 需要注意的是,这个是基于c++ 11/14开发的,如果libclass_loader.so无法使用,请自行下载并编译成.so放到lib目录下。具体可以参考https://blog.csdn.net/jinking01/article/details/108615952

2020-09-16

数据库存储树结构ClosureTableCateogryStore-master.zip

参考本人csdn上的文章,配合看代码,会简单些。这里给出了用数据库怎么存储一棵树。采用java实现。一般来说对于树结构,使用结构化数据库存储是一个麻烦的事情。

2020-02-27

storage_ws_jin0906.tar.gz

这里是我在ros开发过程中使用sqlite3存储ros中各种消息的过程中使用json扩展的示例,storage包中的test目录下的sqlite3Test文件介绍了如何使用json扩展,具体流程看我的博客。

2019-09-06

开源内存数据库的调研与分析.doc

内存数据库的优劣对比,主要包括fastdb,memcachedb,mangodb等,也涉及到了数据库的设计思路,已经性能比较。对于选择合适的内存数据库有一定的帮助吧。

2019-08-30

fastdb-arm.tar.gz

fastdb的代码无法在tx2或者说arm架构的开发板上直接使用,编译也无法通过,我这里是在tx2上编译通过的版本,生成的libfastdb.so在fastdb的src/下的隐藏目录.libs下,生成的4个可执行文件就在src下。请参考我的csdn文章,看怎么在非x86_64环境下编译fastdb。

2019-08-23

FastDB 高效率的内存数据库系统.doc

FastDB详细介绍,涉及思想,架构,用例,以及相关用法和函数的解释。

2019-08-02

ubuntu 16.04 opencv auto installation

ubuntu 16.04 auto install the opencv 3.4.2. just run " bash install_opencv.sh", then wait for a moment.

2019-03-27

自然语言处理实践者指南Practitioner's guide to NLP part I

自然语言处理实践者指南Practitioner's guide to NLP part I:Processing & understanding text

2019-01-15

Python code for Artificial Intelligence: Foundations of Computational Agents

2019年1月3日,David L. Poole和Alan K. Mackworth更新了人工智能python实战代码,配套《人工智能:计算代理的基础》第二版。是面向众多学习人工智能的同学在理论和实战方面提供指导的图书

2019-01-15

百页教程学机器学习the hundred page machine learning book pdf原版

目前机器学习相关图书一般都很厚, Andriy Burkov写了一本百十页的机器学习教程,近期非常火爆。这里给出了最新修订版的pdf合成版(来自dropbox),供大家使用。The Hundred-Page Machine Learning Book" by Andriy Burkov.

2019-01-02

冰点下载器--百度文库豆丁网免费下载

豆丁网和百度文库等存储大量非技术性文档,当下载的时候总是需要积分。对于没有积分的筒子们,就比较麻烦,到处找人借账号。这里给出冰点下载器,可以免积分下载。

2018-12-26

动手学深度学习中文电子pdf版

《动手学深度学习》图书的pdf版,纸质版还没有出版。这是pdf预览版。18年9月写完的。手把手教大家学deeplearning。全书近600页。

2018-12-06

动手学深度学习中文电子版

《动手学深度学习》图书电子版,2018年9月才写完,纸质版还没有上市哦。介于纯理论和纯实践之间,让你手把手学会深度学习。

2018-12-06

ROS 课程讲义

ROS 机器人操作系统的教学讲义,适用于ROS入门。对ROS的框架以及各模块进行了相对详细的讲解,帮助读者解惑。

2018-11-19

vcForPython27解决安装pycrypto报错vcvarsall.bat找不到问题

vcForPython27解决安装pycrypto报错vcvarsall.bat找不到问题。先安装里面的msi文件,然后再用pip安装pycrypto

2018-06-01

安卓app反编译及看源码用到的工具包

安卓app反编译破解所需要用到的包,包括查壳,反编译,class转java,dex2oat等等。

2018-06-01

手机app脱壳虚拟机镜像

这是我破解一个360加固的app所用到的虚拟机的镜像。使用方式可以参见我的文章https://blog.csdn.net/jinking01/article/details/80533522

2018-06-01

jd-gui1.4+dex2jar2.0+apkdb+apktool apk反编译套装

最新的jd-gui版本和最新的dex2jar,apkdb最新版和apktool 反编译apk必备工具

2018-05-31

win7 基于spring boot+elasticsearch+Redis+mysql+mybatis进行搜索引擎web开发--爬取IThome热评

win7 基于spring boot+elasticsearch+Redis+mysql+mybatis进行搜索引擎web开发实例。内容是爬取IThome热评存储到mysql,然后在redis建立索引。这个是可以正常运行的,但是还有一部分功能没有完善。具体参考https://blog.csdn.net/jinking01/article/details/80066683

2018-04-27

windows下redis管理工具treeNMS

Redis的数据不太好管理,也不容易查看,青格软件提供了一个windows下redis管理工具treeNMS,这里就是这个,可以直接下载,解压缩后看里面的说明文档,比较简单。基于web来查看管理redis

2018-04-24

《C和指针》pdf高清版和《C陷阱和缺陷》以及源代码

学习C语言,最烦人的就是指针,《C和指针》这本书我买了纸质版,个人觉得写的非常好,把指针解释的非常透彻,经过短时间轰炸,基本把指针摸透了。所以又弄了电子版和代码,希望对后面学习C语言的人员提供帮助,让他们早点摆脱指针的困扰。资源中包括《C和指针》pdf高清版和《C陷阱和缺陷》pdf以及源代码。

2018-04-12

ROS的插件库pluginLIB机制讲解

pluginlib是一个使用C++实现的库, 用于在ROS包里面动态的加载或卸载plugin. plugin满足一些条件的, 可以从运行库(例如共享对象, 动态链接库)中动态加载的类. Plugin在扩展或修改应用的行为上很有优势, 并不需要知道原始类的源码, 也许你在编写代码时, 也并不知道你将会用到哪个plugin, 而是在运行时通过参数载入才确定具体的plugin, 在后面有一点相关的示例, 可以体会一下使用plugin的feeling

2018-04-11

51CTO 机器人操作系统ROS精品课程PPT

99元购买的51CTO的ROS精品课程的PPT,共13讲,对于ROS入门者来说,非常难得。按照这个顺序去学,比看官网的两套流程简单的多,不至于凌乱

2018-03-06

SSM框架——使用MyBatis Generator自动创建代码

SSM框架——使用MyBatis Generator自动化构建代码所需要的两个jar包,同时附了mysql的连接器,如果需要SqlServer对应的jdbc连接器,请到微软官网自行下载。

2017-09-21

metronic 4.7.5 最完整版,共318M,文件中有链接

metronic 4.7.5 最完整版,共318M,非常漂亮的模板,官方售价28美元。通过框架,可以快速构建web平台。解放手工劳工部分,提高效率

2017-09-06

quick4j IDEA进行javaweb开发的快速框架 maven+Spring+SpringMVC+shiro +myhatis

使用idea进行的java web开发。本项目为一个java web框架。可以在此基础之上进行复杂开发。压缩包中有全部代码和编译后的文件(war文件过大,删掉了)。 采用maven+Spring+SpringMVC+shiro +myhatis+mysql进行开发,需要根据个人的mysql情况修改database配置文件,包括口令,用户名,数据库名等。

2017-09-05

java项目做成exe的工具

这里给出了两个将jar文件生成exe的工具,希望能帮助一些新手

2008-11-20

局域网组建一本通,组建局域网

这是一本描述局域网技术,从局域网概念,发展历程,局域网技术,软件及硬件等全方位介绍了局域网组建方法,并给出了具体的实例.

2008-10-21

空空如也

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

TA关注的人

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