查看Linux本机串口: 1、查看串口是否可用 如果需要查看这个串口设备输出: cat ttyUSB0 如果需要对这个设备输入: echo yaoxu > ttyUSB0 常用的调试工具有: minicom...cutecom Linux系统可视化串口应用软件,使用上与Windows系统串口调试工具。 picocom 效果上类似 minicom 的精简版,设置比较简单,还可以有背景颜色。...PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC; 串口权限问题 临时调试解决 在使用串口进行通信时,经常需要使用指令来赋予用户读写的权限 $ sudo chmod 777 /dev...查看linux所有用户 使用 /etc/passwd 文件 使用任何一个像 cat、more、less 等文件操作命令来打印 Linux 系统上创建的用户列表。.../etc/passwd 是一个文本文件,其中包含了登录 Linux 系统所必需的每个用户的信息。
主要原因就是minicom没有彩色文字,看着难受,特别是调试ARM Linux的时候233 安装 因为正常是在Debian系列的Linux发行版上面使用的(deepin或者ubuntu这些的,解决方案比较完善...然后使得这个设备能被picocom工具访问使用 sudo chmod 777 /dev/ttyUSBx 请自行将ttyUSBx替换为当前使用的串口设备 连接串口设备 下面是一般连接一个串口设备说使用的命令...参数讲解 -b: 设置波特率参数 /dev/ttyUSBx:串口设备,请替换为当前使用的串口设备 打开帮助提示页面 ?...+h打开的,所以其他的命令也是同理 发送接收文件 如果直接使用上面的连接串口设备的命令直接去进行文件发送的话,你就会发现Ctrl a+s进行发送的时候根本没办法确定使用哪种协议进行的,很让人摸不着头脑...(其实默认的传输发送接收模式之前的连接截图已经有曝光了,就是z模式233),其实只要仔细点去阅读picocom的man文档的话就能够看到相关的发送接收小节里面有提及相关的内容 ?
LINUX的库提供的波特率是标准波特率,应用时有时会用到非标准的波特率。以下试验使用的xilinx的zynq7020,linux内核是4.14版本。以增加波特率100k为例。...先说为什么增加波特率使用0020001而不在B4000000后面递增使用0010020,这是因为这个低位的20已经被占用了,如下图3,所以找了没被占用的位置,0020000的中2这个bit位置在c_cflag...第一处的0030017也是这个原因,就是将波特率即可使用的这些宏定义包含进去。...图4 修改函数speed_t tty_termios_baud_rate(struct ktermios *termios),图5 图5 其中圈起来的地方是新加的,这就是根据刚才新加的部分进行波特率修改...|= 0020001; (其余配置省略) tcsetattr(fdcom, TCSANOW, &termios_new); 这样串口波特率即更改为100k,如需其他波特率在头文件处增加,应用端赋值对应数值即可
如果要去重的文件过大,超出tmp文件的磁盘容量,就会排序失败,中间结果也不会被成功清理,tmp空间直接飙到100% 这时需要我们手动清理文件来解决
在我们常常使用的软件当中,我们经常可以看到在软件的设置界面,有一个功能那就是去评分的功能,只要我们一点击“去评分”就会调用手机中的应用市场软件。...一开始我以为这个功能的实现是要遍历整个手机中的软件包名,去匹配市场上的大多数应用市场软件呢,这个方法一看就非常麻烦。之后,经过研究才发现其实这个功能实现非常简单。 ?...四行代码就能实现,就能够调用出您手机上所安装的所有应用市场。 代码如下: Uri uri = Uri.parse("market://details?...不信赶紧试试,相信的就赶紧收藏和分享吧,方便自己留着以后用。
最近做了一点和Linux有关的工作,刚刚学习,做一点和shell脚本有关的笔记。...1、创建test.sh文件 touch test.sh 2、编辑sh文件 vi test.sh 3、保存退出 敲击esc, 然后输入 :wq ,回车退出 4、添加可执行权限,当然默认就是可执行的。
在Linux系统中,fork()是一个非常重要的系统调用,它的作用是创建一个新的进程。...如果返回一个正整数,表示当前进程是父进程,并且返回的整数就是新创建出来的子进程的进程ID。 此外,如果fork()返回值为-1,表示创建子进程失败。...fork()函数的本质是在内核中创建一个新的进程控制块(PCB),然后将原来进程的PCB中的大部分内容都复制到新的PCB中去,然后让两个进程同时运行。...由于新的进程是从原来的进程所复制而来的,因此新进程会继承原来进程的所有资源和信息,包括内存、文件描述符、信号处理方式等。 需要注意的是,fork()函数并不保证父进程和子进程的执行顺序。...一般情况下,父进程和子进程之间是相互独立的,它们各自运行各自的代码,共享的只有一部分内存空间,而其他资源则是分别使用的。
那么就是进程启动后,全部去竞争某个锁,竞争到该锁的 worker 执行 log worker 的代码,其余的 worker 继续运行相应程序,这个方案看上去是一个不错的方案,如果是单 worker 的话...,那么就无需去使用该锁即可 利用周末的空闲时间,终于进行了一番探究,究竟 nginx 使用的是上述方案中的哪一个呢?...Single UNIX Specification 标准对此进行了详细的说明,内核在调用 write 前会对文件进行加锁,在调用 write 后会对文件进行解锁,这样保证了文件写入的原子性,也就无需担心数据交错的发生了...linux 系统默认使用 O_NONBLOCK 标识打开文件,而 bsd 等 unix 系统则恰恰相反。 3.2....3.3. socket linux 2.6.14 内核对 tcp socket 写操作进行了说明,他并不是原子的。
拿了一份邮箱地址,想要对地址进行去重。 打开文件一看,好几列。...07.763000000,浙江省杭州市,qq.com,59592,1378747@qq.com,1,1,2015-04-08 15:31:07.763000000,四川省达州市,qq.com,5 命令1: #获得去重后的结果...cat test.txt| awk '{print $2}' | sort |uniq #只显示重复的列 cat 001.csv | awk -F ";" '{print $2}' | sort |...uniq -d #多个字段作为主键,去重 cat 001.csv | awk -F ";" '{print $1"-"$2}' | sort | uniq -d 按空格区分进行去重,所以得出的是15:...in b)print b[x]}' all.txt 随机乱序all.txt文件中的行
Select采用一个bit表,每个fd对应表中的一个bit位,宏FD_SETSIZE为表的大小,添加到fd_set中的fd值必须小于FD_SETSIZE,否则就会越界,假设有如下一段代码: fd_set...通过ulimit命令和setrlimit函数来修改进程内句柄数的限制,并不会影响FD_SETSIZE的值,所以即使通过ulimit命令或setrlimit函数将进程允许的句柄改成很大了,但如果FD_SETSIZE...较容易发生在服务端程序中,因为服务端程序同一时刻的连接数很容易超过默认的FD_SETSIZE值,而服务端的代码可能是使用epoll使用的,所以它本身并不会存在问题,但是程序中可能还有个客户端,比如使用了...select来实现超时连接,这个时候问题就来了,当连接数超过FD_SETSIZE时,超时连接处的select调用就发生了越界,进程就会在某个可能完全不相干的地方crash,要定位这个问题的成本是很高的,...如何去避免这个问题了?那就是尽量不使用select,而应当使用更安全的poll函数来替代,因为poll使用的数组是调用者自己维护的,完全可以保证不越界。
我们有个功能是这样的:有个以 root 运行的 python 程序,它需要以 test 用户执行 linux 命令,所以就通过 subprocess 库 + sudo 来执行,也就是下面的关系图: image.png...凭借过硬的英语水平,我们可以看到这个错误应该在 shell 初始化时候报的,这样很明显啦,去搜 bash 代码。...System 源码 带着不甘心去搜它的实现: int system(const char * cmdstring) { pid_t pid; int status; if...那现在其实一目了然了,system调用了 /bin/sh, 触发shell 初始化了, 在初始化变量时候调用了 get_working_directory,因为获取父目录失败了,所以输出了那段错误。...族函数,它们是将新的程序内容替换当前进程内容运行,具体大家可以去谷歌看看,这边就不多说了~ 我们对 system 的实现已经有一定熟悉了,在后面使用这个方法时候,不管是在资源使用还是问题排查,都应该多一些意识
前言 慢系统调用,指的是可能永远无法返回,从而使进程永远阻塞的系统调用,比如无客户连接时的accept、无输入时的read都属于慢速系统调用。...在Linux中,当阻塞于某个慢系统调用的进程捕获一个信号,则该系统调用就会被中断,转而执行信号处理函数,这就是被中断的系统调用。...然而,当信号处理函数返回时,有可能发生以下的情况: 如果信号处理函数是用signal注册的,系统调用会自动重启,函数不会返回 如果信号处理函数是用sigaction注册的 默认情况下,系统调用不会自动重启...,函数将返回失败,同时errno被置为EINTR 只有中断信号的SA_RESTART标志有效时,系统调用才会自动重启 下面我们编写代码,分别验证上述几种情形,其中系统调用选择read,中断信号选择SIGALRM...由于对被中断系统调用处理方式的差异性,因此对应用程序来说,与被中断的系统调用相关的问题是: 应用程序无法保证总是知道信号处理函数的注册方式,以及是否设置了SA_RESTART标志 可移植的代码必须显式处理关键函数的出错返回
介绍 我们在平时的开发中,很有可能遇见有的核心板没有串口,但我们却想操作板子搭建的Linux,那么这时候应该怎么办呢?可以使用ADB,下面我们来具体介绍一下ADB。...它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互。常常用于手机端Android的调试,但也可以使用在Linux开发板的调试。...服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。...输入adb shell进入到板子linux系统的命令行 点灯 查看IO复用情况表 cat /sys/kernel/debug/pinctrl/2000000.pinctrl/pinmux-pins...打开LED echo 1 > value 可以看到核心板的最左侧的小灯已经打开。 5. 关闭LED echo 0 > value 可以看到核心板的最左侧的小灯已经关闭。
1, Linux系统调用:2.6.19版内核提供了319个系统调用。...我们暂时把API和系统调用等同起来 3, Linux中,每个系统调用对应一个系统调用号,内核维护了一个系统调用表,通过这张表可以找到对应的系统调用函数。...用户态要切换到内核态,操作系统一般是通过中断来完成 3, Linux使用0x80中断作为系统调用的入口,Windows采用0x2E号中断作为系统调用入口 4, 中断是一个硬件或软件发出的请求,要求CPU...三 基于int的Linux的经典系统调用实现(进入正题) 1, 以fork为例 void main(void) { fork(); } 2, 大概流程就是这样:用户调用fork -> ...从中断处理程序中返回时,再切换回用户栈 (4) “当前栈”指的是ESP的值所在的栈空间,若ESP的值位于用户栈的范围内,那个当前栈就是用户栈,反之就是内核栈。
EasyNVR在前期的开发中增加了一个串口功能,这个功能我们不常提起,算是比较小众的一个功能,但是对需要通过一个链接来切换视频通道的项目来说,是非常实用的功能。...EasyNVR内串口功能的作用是假如EasyNVR接入的硬盘录像机,通过开启串口,即可通过一个通道来切换硬盘录像机内任意一个视频通道播放。 本文则分享一下串口功能的使用方法。...2.拉取从硬盘录像机中输出的流,在硬盘录像机下面还有其他通道,我们需要使用串口来进行更改; 3.此时需查看串口的状态是否正常; ? 4.确定串口状态之后开启调用,改变EasyNVR里的播放画面。...其中串口信息可以通过网址来进行分辨,如下图中标注: ? 5.可以看到视频流调用成功,EasyNVR播放的通道已经转换成了其他通道的视频流。 ?...EasyNVR通过串口即可达到我们上文所述的功能,此外,EasyNVR还具备其他丰富的接口,可以在测试中自由调用。
EasyNVR内串口功能的作用是假如EasyNVR接入的硬盘录像机,通过开启串口,即可通过一个通道来切换硬盘录像机内任意一个视频通道播放。 本文则分享一下串口功能的使用方法。...开启EasyNVR的串口功能后,登录EasyNVR的Web页面,选择一个通道并且进入该通道的播放界面; image.png 2.拉取从硬盘录像机中输出的流,在硬盘录像机下面还有其他通道,我们需要使用串口来进行更改...; 3.此时需查看串口的状态是否正常; image.png 4.确定串口状态之后开启调用,改变EasyNVR里的播放画面。...其中串口信息可以通过网址来进行分辨,如下图中标注: image.png 5.可以看到视频流调用成功,EasyNVR播放的通道已经转换成了其他通道的视频流。...EasyNVR通过串口即可达到我们上文所述的功能,此外,EasyNVR还具备其他丰富的接口,可以在测试中自由调用。
文章目录 一、mmap 与 mmap2 系统调用 二、Linux 内核中的 mmap 系统调用源码 一、mmap 与 mmap2 系统调用 ---- mmap 创建 " 内存映射 " 的 系统调用 有...mmap2 ; 2 者区别是 : mmap 偏移单位是 " 字节 " , mmap2 偏移单位是 " 页 " , 但是在 arm 64 体系架构中 , 没有实现 mmap2 , 只实现了 mmap 系统调用...; 二、Linux 内核中的 mmap 系统调用源码 ---- arm64 架构体系中 , 使用 mmap 系统调用 创建 " 内存映射 " , 调用 mmap 系统调用函数 , 执行如下操作 : 先检查..." 偏移 " 是否是 " 内存页大小 " 的 " 整数倍 " , 如果偏移不是内存页大小的整数倍 , 返回 -EINVAL 错误 ; 如果偏移是内存页大小的整数倍 , 则调用 sys_mmap_pgoff...return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); } 参考路径 : linux
Ubuntu 20启动时,自动加载了UART驱动,系统启动信息含有UART的相关信息。...disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console GRUB_TERMINAL_OUTPUT="gfxterm console" 串口上看到的...Advanced options for Ubuntu 串口上也能看到的...修改/etc/default/grub文件, 增加参数"console=tty0 console=ttyS4,115200n8",串口上看得到 Linux的启动信息,也能有Linux的登陆界面,可以交互执行命令...GRUB_CMDLINE_LINUX="console=tty0 console=ttyS4,115200n8" Linux的串口界面: Ubuntu 20.04.6 LTS Bilby-RV1-R2314
本文的主题依然不是劫持系统调用,而是添加系统调用,并且是动态添加系统调用,即在不重新编译内核的前提下添加系统调用,毕竟如果可以重新编译内核的话,那实在是没有意思。...我的问题是: Linux系统中如何获取以及修改当前进程的名字??...你去搜一下这个topic,一堆冗余繁杂的方案,大多数都是借助procfs来完成这个需求,但没有直接的让人感到清爽的方法,比如调用一个getname接口即可获取当前进程的名字,调用一个modname接口就能修改自己的名字...text接口,而不是自己去修改页表权限。...// 这是因为内核函数之间的互调使用的是rel32调用,这就需要校准偏移,太麻烦。// 记住:作为例子,不调用printk,也不调用memcpy/memset...如果想秀花活儿,自己去校准吧。
领取专属 10元无门槛券
手把手带您无忧上云