- 博客(37)
- 资源 (6)
- 收藏
- 关注
原创 Git合并分支代码的正确方法
假定您之前已经装好了git,而且已经能git pull、git add、git commit -m “评论”、git push和创建分支等操作;我的操作目的是:将分支开发的代码合并到主干上,所以使用git checkout master,切换到主干上。进入Windows PowerShell,cd到你要操作项目的根目录,也就是.git文件所在的目录;
2023-05-11 09:36:07
1255
转载 Git入门详解
将尚未进行版本控制的本地目录转换为Git仓库,从其它服务器克隆一个已存在的Git仓库,这两种方式都能够在自己的电脑上得到一个可用的Git仓库。
2023-04-20 19:15:40
121
原创 jquery实现input元素组添加和删除
写了好几次这样的方法,每次都是从头开始写,现在觉得很常用,记录下来。逐渐的完善后,希望能给其他人提供方便!
2023-04-12 22:12:06
675
原创 AndroidStudio测试讯飞听写遇到的问题和我的解决办法
今天在做人工智能产品开发时,需要用到“科大讯飞”的“语音听写(流式版)”Demo,测试用语音控制设备操作可行性;在按照“语音听写 Android SDK 文档”操作,将代码移植后,并编译到测试手机上后,发现提示“创建对象失败,请确认libmsc.so放置正确,且有调用createUtility进行初始化”错误,如下图所示: 网上找了很多办法,官方的工单也看了,大半天都解决不了。后来,看到csdn上有个博主有同样的问题,感觉莫大的欢喜,于是用他的方法试试,也没解决。最终,在试来试去过程中,无意间解决了这个问题
2022-12-07 17:07:18
1101
1
原创 修改根目录下.rc只读文件内容的方法
目标板:rk3399+安卓8.1系统当我们想在板子启动文件加一些配置,比如修改sysfs文件权限时,我们发现Read-only file system的错误提示;使用mount命令查看,显示根文件系统"rootfs on /"包含了ro这个词,说明文件只读,不能被直接修改。 需要找到init.rk3399.rc,修改编译,重新烧录root.img 以下是具体步骤:1.在 ubuntu 虚拟机的安卓工程源文件中找到 /home/robin/work/rk3399-android-8.1/devi
2022-12-05 14:01:53
832
原创 input输入子系统
*> Event interface // handler 层: drivers/input/evdev.c。Input device support ---> //核心层: drivers/input/input.c。框架),将用户空间到内核空间的数据格式统一起来。为输入设备驱动定义了一个标准的编程方式(也就是能更高效的开发输入设备的驱动。中的事件输入驱动都被集成到了。1). 声明一个输入设备对象;的支持越倾向于用内核的。针对输入设备的驱动框架。按键数据,例如:字母。
2022-11-30 23:12:33
1156
原创 移植linux驱动代码到内核中
一,下载需要移植的代码,并把代码复制到kernel对应的drivers/ron子目录中;第一,单独编译成ko文件,使用模块编译命令insmod挂载到内核中使用;二,新建或是修改Kconfig,添加该部分的编译选项;第二,编译到内核当中,和内核一起启动和加载;让编译器知道你自定义的 Makefile。编译并烧录内核、重启开发板后调试;和 Kconfig;
2022-11-30 22:26:52
666
原创 触摸屏I2C驱动移植
在第九个时钟是,主控会将 sda 拉高释放控制权,从设备收完数据后将 SDA 拉低,表示ack.发送到 SDA 总线上的每个字节必须是 8 位,每次传输可以发送的字节数量不受限制,每个字节后必须有一个响应位.先传输数据的高位(MSB).每个连接到总线的器件都可使用软件根据它唯一的地址来识别,传输数据的设备之间是主从关系。S:SCL 高电平,SDA 由高到低跳变,开始传送数据;P:SCL 高电平,SDA 由低到高跳变,结束传送数据;主机:发起/停止数据传输,提供时钟信号的器件;发送器:发送数据到总线的器件;
2022-11-27 20:00:30
1781
原创 创建 sysfs 设备节点
控制 gpio 来实现 led 驱动,创建一个设备节点 gpio_led,操作节点来控制 GPIO 的电平用以实现对 LED 灯操作,往节点写 1(echo 1 >)就拉高 GPIO 电平亮灯,往节点写 0(echo 0 >)就拉低 GPIO 电平灭灯。调用 device_create_file,device_create_file 定义在 drivers/base/core.c中,声明在include/linux/device.h中,device_create_file 返回 0 代表创建成功。
2022-11-27 13:48:13
913
原创 平台总线驱动和设备树匹配
总线代表着同类设备需要共同遵循的工作时序,不同的总线对于物理电平的要求是不一样的,对于每个比特的电平维持宽度也是不一样的,总线上传递的命令也会有自己的格式约束。在Linux系统中总线可分为两种,1、一种是实际存在的总线(例如I2C、SPI、USB等总线)。2、另一种是虚拟存在的总线(platform总线)。1.linux设备驱动程序的演变1.1 硬件资源和驱动写在同一个文件里简单不易扩展,需重新编译,不同的引脚要写不同的驱动。1.2 总线设备驱动硬件资源用指定;
2022-11-21 22:40:11
1260
原创 罗马数字转阿拉伯数字两种实现
不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。基本数字 Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;小的数字(限于 I、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ=4、Ⅸ=9;小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ=8、Ⅻ=12;相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ=3;
2022-11-16 17:27:41
1083
原创 使用Ubuntu虚拟机测试Linux驱动
我当前的版本是4.4.0-210-generic,这是防止Ubuntu升级后会产生很多版本。我使用的是win10笔记本电脑,前提是在此笔记本上安装好Ubuntu4.4.0的虚拟机,这个不再赘述,网上资源非常多。246 hello_drv ##############我们注册的驱动##################/lib/modules/4.4.0-210-generic/build就是内核源码所在位置,第四步用到;三、编写测试用的驱动程序和应用程序。...清除以前的信息......切换到根账号...
2022-11-09 12:50:41
860
原创 git版本库管理工具使用教程
git版本库管理工具使用教程;以Ubuntu为例:sudo apt-get install gitGit全局设置:git config --get user.name 和 git config --get user.email。
2022-11-05 16:24:04
286
原创 网络编程-广播、组播和Unix套接字
数据包发送方式只有一个接受方,称为单播;如果同时发给局域网中的所有主机,称为广播;只有用户数据报(使用UDP协议)套接字才能广播;广播地址以 192.168.1.0 (255.255.255.0)网段为例,最大的主机地址代表该网段的广播地址,发到该地址的数据包被所有的主机接收,255.255.255.255 在所有网段中都代表广播地址。在所有网段中都代表广播地。
2022-10-28 14:20:36
272
原创 网络通信-多路复用
阻塞说的不是某一个函数,说的是文件描述符的一种属性。因为文件描述符有阻塞属性,所以对这个文件描述符的相关操作是阻塞的。读操作:read、recv、recvfrom写操作:write、send其他操作:accept、connect总结:阻塞并不是函数的属性,是文件描述符的属性//读flag//修改flag//写flag构建一张有关文件描述符的表,然后调用函数,当这些文件描述符中某个准备好,函数返回告诉哪个描述符就绪,进行相应操作。
2022-10-26 19:29:43
138
原创 网络通信TCP/UDP
是一种不建立连接,不能够保证数据无丢失,无重复的通讯方式。返回值:成功返回一个文件描述符,失败返回-1。等)的参数传入的时候转换成 sockaddr。返回值:成功返回接收到的字节的个数,失败返回。如果不绑定,系统会自动分配一个端口号。返回值:成功返回发送的字节数,失败返回。通信是不连接的,不可靠的通信方式。通常的做法是:填值的时候使用。()函数,取消端口号绑定限制。先运行服务器,再运行客户端。同时连接的客户端的最大数量。结构,而作为函数(如。结构就行了,毕竟都是。、三次握手与四次握手。
2022-10-25 19:15:46
833
原创 网络通信-大小端转换
是一个网络编程接口,是一种特殊的文件描述符,主要位于应用层与传输层之间。hostshort:需要转化的数据。netshort:需要转化的数据。保存二进制 IP 的结构体。将点分十进制 IP 转化为大端序的二进制。功能:将点分十进制 IP 转化为二进制。cp:点分十进制 IP。in:保存二进制 IP。功能:将用户字节序转化为网络字节序。功能:将网络字节序转化为用户字节序。数据报套接字(SOCK_DGRAM。功能:将点分十进制 IP。功能:将保存二进制 IP。将大端序的二进制 IP。
2022-10-24 20:56:19
634
原创 Linux 线程同步和互斥-互斥锁以及条件变量
mutex是一种简单的加锁的方法来控制对共享资源的访问。在同一时刻只能有一个线程掌握某个互斥上的锁,拥有上锁状态的线程能够对共享资源进行访问。若其他线程希望上锁一个已经被上了互斥锁的资源,则该线程挂起,直到上锁的线程释放互斥锁为止。静态定义互斥锁的变量//快速互斥锁,缺省的//递归互斥锁,可以多次加锁//检错互斥锁,快速互斥锁的非阻塞版本静态初始化动态初始化//创建锁对象//创建锁的属性对象//初始化属性对象//快速互斥锁//递归互斥锁//检错互斥锁。
2022-10-24 19:27:50
285
原创 Linux 线程同步和互斥-无名信号量
线程间的信号量一般叫匿名信号量(进程间的信号量叫有名信号量),信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限:当信号量值大于0时,则可以访问,否则将阻塞。PV原语是对信号量的操作,一次P操作使信号量减1,一次V操作使信号量加1。信号量主要用于进程或线程间的同步和互斥这两种典型情况。信号量用于互斥:信号量用于同步:在POSIX。
2022-10-24 18:52:13
223
原创 进程间通信-消息队列
多个进程可以操作同一个消息队列,可以从消息队列中读取数据,也可以往消息队列写入数据。一个进程可以发送多种类型的消息。消息队列提供一种带有数据标识的特殊管道,对于多进程间的通信,可以根据数据标识来区分多个进程。负责监听并读取消息队列的内容,并打印对应打印消息类型,进程。1、避免了管道通信的同步阻塞问题,读进程从管道中读取数据,其实可以将消息队列简单的看做带数据格式的。函数功能:发送一条消息到消息队列中。函数功能:从消息队列中接收一条消息。,指定接收消息队列中第一条类型等于。,指定接收消息队列第一条消息。
2022-10-21 20:58:18
987
原创 Linux多线程
由于进程的地址空间是私有的,因此在进程间上下文切换时,系统开销比较大;为了提高系统的性能,许多操作系统规范里引入了轻量级进程的概念,也被称为线程。4、同样情况下: 多线程的资源消耗要小于多进程, 特别是在一些手持设备中,这个表现的比较明显 CPU 和内存之间的缓存。线程在栈里面是不同的,线程的空间叫栈帧,每个线程的栈帧是私有的。在同一个进程中创建的线程共享该进程的地址空间,线程和进程统一调度;当线程切换的时候,由于同一进程中的所有线程都是共享同一。在同一个进程中创建的线程共享该进程的地址空间。
2022-10-21 18:24:41
389
原创 linux的文件 IO
文件 io 和标准io区别:1、缓冲区不同:标准IO有缓冲,文件IO无缓冲;2、操作对象不同:标准 IO操作流文件 IO是文件描述符3、操作函数不同、内核为高效管理已被打开的文件所创建的索引,用于指向被打开的文件;所有的IO系统调用都通过文件描述符;是一个简单的非负整数,用来表明每个被进程打开的文件.程序刚刚启动;第一个打开的文件是0,第二个打开的文件1,以此类推顺序分配;每个进程在启动时会由shell自动打开0,1,2。
2022-10-20 22:40:57
345
原创 linux常用时间函数和目录操作函数
在linux系统里面,我们有时候需要获取当前时间,用它来统计程序运行的时间,或者显示标准格式的日期和时间等等。那么怎么获取时间呢?用到了 time_t 类型 返回类型 char * 可当成字符串 %s。这个函数可以把任意一个tm结构体转换为标准格式的日期和时间。time_t 是什么类型?秒数,为long正整型;获取函数内部的值有几种方式?
2022-10-20 20:27:40
203
原创 进程间通信-信号量
信号量主要用于资源的保护,实现互斥(防止多个进程同时访问临界区)和同步(多个进程按一定顺序执行)。可以用于不同的进程间或一个给定进程内部的不同线程之间进行资源互斥和同步。信号量可以保护一个或多个资源,也叫信号灯(通俗semaphore)。1、posix有名信号灯;2、posix基于内存的信号灯(无名信号灯);信号灯(IPC对象),现在用的是IPC对象。信号量相当于一个全局的整型变量,这个变量只能用于原子操作改变值。
2022-10-20 19:59:45
430
原创 Linux的标准IO文件操作
因为我们在创建一个很大文件的时候,我们就把一个文件分成很多的段,然后采用多线程的方式,让每个线程负责写入其中的某一段的数据。的系统调用,各种库文件是建立再系统调用之上的,可以由用户程序(application。对于磁盘文件的操作通常使用全缓冲的方式访问。),它提供了运行其他用户程序的接口。系统不自动开辟确定大小的缓冲区,而是由程序为每个文件设定缓冲区。//方向:format格式化字符串-->str (一次读一行 stream-->size-->s;空洞文件的好处是:空洞文件对多线程共同创作文件是很有用的。
2022-10-19 22:05:20
151
原创 进程间通信-信号
信号是进程间通信方式;信号是唯一的一种异步通信方式;是软件层次上中断模拟。1、信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。2、信号可以在进程与进程之间,内核与进程之间产生。3.、信号可以被阻塞,可以延迟送达,但信号不会丢失。
2022-10-19 13:24:45
1248
原创 进程间通信-有名管道
创建文件的类型是管道文件,是一种特殊文件只能用在进程间通信。打开放点东西不行只能在进程间read write 东西。使用管道前必须创建管道文件。创建了管道文件 字节为 0,示例:测试有名管道的最大长度为:65536字节。由于有名管道是全双工可以不断的往里面写。可以用于没有亲缘关系的进程间通信;全双工的,两端即可读也可写;参数:1.管道名称 2.权限。但是有东西两个进程可读写。读端即使关闭也可以不断写,仍然可以读到写端的数据。
2022-10-19 12:32:05
227
原创 进程间通信-无名管道
无名管道是单工的工作方式,即进程要么只能读管道,要么只能写管道。父子进程虽然都拥有管道的读端和写端,但是只能使用其中一个(例如,可以约定父进程读管道,而子进程写管道)。将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就会试图向管道写入数据。如果读进程不读走管道缓冲区中的数据,那么当缓冲区满的时候写操作将会一直阻塞。另外,父进程也可以创建 多个子进程,各个子进程都继承了管道的 fd[0]只有在管道的读端存在时,向管道中写入数据才有意义。否则,向管道中写入数据的进程将收到内核传来的。SIFPIPE 信号。
2022-10-18 19:14:05
518
原创 Linux守护进程
中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会被自动关闭。需要注意的是,只要在某个进程组中有一个进程存在,则该进程组就存在,这与其组长进程是否终止无关。之外,还属于一个进程组,进程组是一个或多个进程的集合。一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成, Shell 可以同时运行一个前台作业和任意多个后台作业,这称为作业控制(组长进程的标识是,其进程组 ID。
2022-10-18 17:35:14
440
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人