Linux
文章平均质量分 57
时间自由
这个作者很懒,什么都没留下…
展开
-
Linux C 程序 【04】线程分离
线程的的创建可以分为 joinable 和 detached 共 2 种状态,其中 detached 属于分离状态,线程的创建模式是可结合状态,即 joinable,这种情况下线程结束后需要调用 pthread_join 回收资源,否则有出现内存溢出,同时 pthread_join 也起到了等待线程执行完成的功能。使用 top 查看内存变化如下,一直递增,由于 top 并非事实刷新,只能看到内存的变化趋势。至于 detached 状态指的是线程分离,即不需要特意调用线程回收功能,线程结束后自动回收。原创 2024-08-09 13:44:43 · 211 阅读 · 0 评论 -
Linux C 程序 【03】线程栈空间
代码里递归函数 recursive_function 每递归一次消耗 1024KB 内存,完成了 0 - 6 共 7 次递归,第 8 次递归直接越界,产生段错误,内存溢出。由测试结果可知,线程的内存堆栈是可以设置的,而且有最小值,这里的最小内存是 128KB,小于128KB的按照默认大小 8192KB 配置。上一个篇章创建了线程,参考 FreeRTOS,每个线程都是有自己的内存空间,Linux上面也是一样的,这个篇章主要描述线程栈空间的设置。1)创建线程,并配置线程内存大小。原创 2024-08-07 20:04:57 · 427 阅读 · 0 评论 -
Linux C 程序 【02】创建线程
上一个篇章,基于 RK3568 平台的基础上,运行了最简单的程序,然而我们使用了 Linux 系统,系统自带的多线程特性还是比较重要的,这个篇章主要描述线程的创建。进程号相等 12025,线程号不等,测试OK。创建一个线程,主程序等待线程运行。原创 2024-06-27 15:37:21 · 399 阅读 · 0 评论 -
Linux C 程序 【01】最小程序
由于 RK3568 作为宿主机,在上面编译程序比较慢,所以还是采用在 Ubuntu 下交叉编译后再拷贝到宿主机上运行。基于 RK3568 平台的基础上,编译一个在系统上运行的最小程序。Makefile 的创建和使用参考 Makefile 篇章。编译代码后自动发送到目标机,这样就可以直接测试程序了。1)搭建 Makefile。2)创建一个最小运行程序。本章的测试源代码很简单,不涉及功能。原创 2024-06-27 14:02:00 · 343 阅读 · 0 评论 -
Linux cmake 初窥【3】
基于上个试验的基础上,增加了动态库 LibShare 和 静态库 LibStatic。基于上一篇的基础上,已经实现了多个源文件路径调用,但是没有库的实现。LibShare CMakeLists.txt,主要是负责管理动态库源文件。LibStatic CMakeLists.txt,主要负责管理静态库源文件。首先还是解析顶层的 CMakeLists.txt,指定了链接库文件。基于 cmake 的动态库和静态库的调用。最后介绍一下 main.cpp 文件。先编译动态库,再编译可执行文件。原创 2024-05-08 20:34:52 · 231 阅读 · 0 评论 -
Linux cmake 初窥【2】
顶层脚本 compile.sh 负责执行 cmake 操作,顶层的 CMakeLists.txt 很关键,指定了源文件路径,其中每个文件夹中都放置了一个CMakeLists.txt 文件,语法要求,否者会报错。func 中的函数就是 Func_Test();和 Func2_Test();基于 cmake 指定源文件目录可以是多个文件夹,多层目录。基于上一篇的基础上,再次升级。顶层 CMakeLists.txt。原创 2024-05-07 20:34:36 · 381 阅读 · 0 评论 -
Linux cmake 初窥【1】
linux 下编译程序需要用到对应的 Makefile,用于编译应用程序,但是 Makefile 的语法过于繁杂,甚至有些反人类,所以这里引用了cmake,cmake 其中一个主要功能就是用于生成 Makefile,cmake 的语法更友好。主要包括 main.cpp、func.cpp 和 func.h,当然还是少不了 cmake 的关键脚本 CMakeLists.txt,CMakeLists.txt 主要是用来描述工程结构。执行到这里,我们可以进入 build 文件夹下执行熟悉的 make 操作了。原创 2024-04-22 20:32:00 · 180 阅读 · 0 评论 -
Linux Makefile
其中,使用了交叉编译工具:aarch64-linux-gnu-gcc,编译生成的文件移动到 install,方便查看,需要注意的是这里指定了多个源文件和头文件路径。如果只是一般操作,Makefile 在.o文件存在的情况下是不会重新编译的,这就意味着一般的修改.h 文件不会重新编译.c文件的。解决方法:使用 -MMD 编译生成中间链接关系文件,再调用-include,带前缀‘-’,否者 第一次编译会报没有.d文件。3)支持只编译修改的文件,包括源文件和头文件。编写 Makefile 编译应用程序。原创 2024-04-19 19:38:52 · 682 阅读 · 0 评论 -
Linux debian gdb dump
debian 操作系统,如果不支持需要查看是否存在对应的可执行文件。如图所示:可以定位到问题出现在函数 func_fault 中,可以定位出溢出位置。编译程序并运行程序,如下,core dumped 表示有 dump 文件生成。记录 debian 下应用程序崩溃调试方法。程序越界可以定位到越界的位置附近。生成的 core 文件和应用程序同一层目录。现在需要制造一个越界的应用程序,如下。原创 2024-04-18 19:56:19 · 640 阅读 · 0 评论 -
Linux 指令之磁盘
块设备接入设备是不能直接访问的,这个时候就需要挂载,即把设备挂载到某个目录下,这样我们就可以通过挂载的目录去访问块设备里面的内容了。linux 操作系统,如果不支持需要查看是否存在对应的可执行文件。一般接入的硬盘或者u盘等都会在 /dev 下被枚举出来,可以直接对块设备格式化。一般在预研阶段需要对板卡的各种外设进行性能测试,硬盘等块设备的读写测试无可避免。记录 linux 下对磁盘操作的指令。记录常用的磁盘操作指令。原创 2024-04-17 19:44:02 · 274 阅读 · 0 评论 -
Linux 指令之文件
a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。-i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。事实上很多时候我们需要用到快捷链接的形式,类似 windows 下面的快捷方式。-d:复制时保留链接。-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。-f:覆盖已经存在的目标文件而不给出提示。-l:不复制文件,只是生成链接文件。原创 2024-04-16 20:30:36 · 342 阅读 · 0 评论 -
Linux 网络测速
搭建 iperf3 ,在 ubuntu 下安装服务端,在板卡上安装客户端,服务端和客户端互发。ubuntu20.04 + 嵌入式开发板(debian + 千兆网口)网络测速,为了测试开发板的网络速度是否达标的通用测试方法。查看服务器 IP,后面客户端连接会用到。原创 2024-04-15 19:59:11 · 814 阅读 · 0 评论 -
Linux Ubuntu 网络异常
ubuntu 虚拟机下开发程序时,出现网络 IP 地址找不到问题。在 ubuntu 网络找不到的情况下重启网络。解决方法:删除ubuntu保存的异常状态后重启。解决方法:重启网络管理器。原创 2024-04-15 19:24:06 · 349 阅读 · 0 评论 -
Linux tftp 环境搭建
搭建 ubuntu 下的服务端,嵌入式开发板请求传输 ubuntu 下文件到板卡上。tftp 即文件传输协议,主要通过网络通讯的方式实现文件跨机器传输。创建配置文件:/etc/xinetd.d/tftp,指定路径:/home/xxx/修改配置文件 /etc/default/tftpd-hpa。ubuntu20.04 + 嵌入式开发板。拷贝文件 test.txt 到目录。原创 2024-04-11 20:24:04 · 431 阅读 · 1 评论 -
Linux nfs 环境搭建
追加内容:RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"其中,ubuntu IP 地址 172.16.0.136,挂载文件到开发板的 ./nfs_test/ 文件夹下。搭建 ubuntu 下的服务端,嵌入式开发板共享 ubuntu 的某个文件夹。这里开发板已经挂载了本地文件系统,通过 nfs 挂载到一个测试文件系统到开发板中。mount 将 /xxx/nfs 文件夹挂载到 /mnt 文件夹下。如果挂载成功,/mnt 和 /xxx/nfs 文件一致。原创 2024-04-11 19:52:39 · 469 阅读 · 0 评论 -
Linux 对隐藏文件的操作
1、linux 系统下隐藏文件(.xxx)的拷贝和删除操作2、拷贝操作: (1)一般文件操作:cp -rf xxx/* yyy/ (2)隐藏文件操作:cp -ef xxx/. yyy/(普通文件一并拷贝)3、删除操作 (1)一般文件操作:rm -rf xxx/* (2)隐藏文件操作:rm -rf xxx/.*4、演示截图,从 src 文件夹拷贝隐藏文件到 dist,然后再...原创 2023-09-18 19:51:00 · 334 阅读 · 0 评论