06 开机自启动
Linux初始化系统 想要设置开发板的某程序开机时自启动,有多种方式,本质上是使用了Linux的初始化系统。在linux内核启动后期会尝试加载用户空间的init程序,init程序是由内核启动的第一个用户空间程序(PID为1),该程序负责启动用户空间的服务和程序 init程序由初始化系统提供,可以通过以下方法查看系统的init进程到底是谁: 法1: 法2:pstree -p BusyboxBusyBox 是一个高度集成的嵌入式Linux工具集,它既是一个轻量级初始化系统,也是一个精简版的Unix命令集合。它的核心设计目标是用最小的空间提供完整的Linux系统功能 BusyBox 提供了一个简化的init程序,用于替代传统的 SysVinit或 systemd,它的init程序有2种实现形式: (1) 传统 SysVinit 风格 配置文件:/etc/inittab 启动流程: 内核启动后执行 /sbin/init(通常是 BusyBox 的符号链接) BusyBox 读取 /etc/inittab,定义运行级别和启动脚本 执行 /etc/init.d/中的脚本(如...
00 常用路径总结
常用路径总结在Linux中,我们如果用apt之类的包管理工具安装些第三方库,他们放置的位置都出奇的一致,下面来总结一下 头文件编译时默认头文件查找目录 /usr/include /usr/include/x86_64-linux-gnu(架构相关的子目录) /usr/local/include(大部分发行版是默认的,但也有的不是) 搜索规则 编译器只维护一组搜索根目录列表 不会递归扫描子目录 会将#include中写出的相对路径与搜索根目录拼接后匹配 例如:#include <foo/bar.h> 会依次尝试: 123/usr/include/foo/bar.h/usr/include/x86_64-linux-gnu/foo/bar.h/usr/local/include/foo/bar.h(如果该路径在默认列表中) 第三方库头文件的组织方式 第三方库通常在搜索根目录下创建以库名命名的子目录 12/usr/include/x86_64-linux-gnu/opencv4/usr/local/include/mylib 使用方式为:#include...
11 查看配置信息
查看配置信息 有的时候,我们在使用其它人编译的内核的时候,可能希望知道某些配置项的设置,可以通过下面的方法进行查看 uboot启动参数1cat /proc/cmdline 内核编译配置1zcat /proc/config.gz 这个命令会显示当前正在运行的内核配置,所有的配置项(例如启用的驱动程序、内核功能等)都将以 CONFIG_* 形式列出。通过这些配置项,可以了解到该内核的编译参数。 内核版本可以通过以下命令查看当前系统的内核版本和其他相关信息: 1uname -r 或者详细一点: 1uname -a 这将输出内核版本、系统架构、主机名等信息。 磁盘分区信息查看磁盘和分区信息: 1lsblk 或者: 1fdisk -l 这将列出所有磁盘和分区的详细信息
08 pkg config
pkg-configpkg-config是一个命令行工具,使用它可以快速查看当前环境中安装了哪些第三方库,方便在一个库没提供.cmake文件时链接该库 核心用法12345678910pkg-config --list-all # 列出所有库pkg-config --modversion 库名 # 查看版本pkg-config --cflags 库名 # 查看编译标志pkg-config --libs 库名 # 查看链接标志pkg-config --variable=libdir 库名 # 库文件目录pkg-config --variable=includedir 库名 # 头文件目录pkg-config --variable pc_path pkg-config 注意事项 不是所有库都注册了 pkg-config 信息,有些库可能没有 .pc 文件,但是使用apt安装的带-dev的包一般都带.pc文件 如果找不到某个库,可能是因为: 库确实没有安装 库没有提供 .pc 文件 .pc 文件不在 pkg-config...
10 包管理工具
包管理工具在Linux系统中,包管理工具是软件安装、升级、卸载和维护的核心组成部分,它们极大地简化了软件管理过程。不同的Linux发行版采用了不同的包管理体系,比如Debian系用的是apt、RetHat系用的是yun… dpkg dpkg是Debian系列发行版中最底层的包管理工具,它直接面向本地.deb格式的软件包 dpkg的主要职责是对单个软件包进行操作,例如安装、卸载、查看包信息等 它本身并不具备自动解决依赖关系的能力,因此在使用dpkg安装软件时,如果该软件依赖的其他库或组件尚未安装,dpkg只会报错并终止操作,需要用户手动处理依赖问题 123456789101112131415161718192021222324# 安装本地的.deb软件包,如果依赖缺失会报错但不会自动解决dpkg -i package.deb# 卸载已安装的软件包(但不删除/etc下的配置文件,适合以后重新安装)dpkg -r package_name# 完全卸载软件包(同时删除配置文件)dpkg -P package_name#...
09 删掉某个可执行文件相关依赖
删掉某个可执行文件相关依赖我们在用apt-get装了某个可执行文件/库之后,可能又想删掉它,可能第一时间想到的方式是用rm *的方式删,但是这样容易删不干净。既然文件是由apt-get安装的,拿再由包管理工具删掉就好了 寻找待卸载文件属于哪个包 以qemu-system-riscv64为例 法1:检查系统中通过 apt 安装的 QEMU 相关包 1apt list --installed | grep qemu 法2:查看具体包名 1dpkg -S /usr/bin/qemu-system-riscv64 卸载包12sudo apt-get remove qemu-system-riscv # 保留配置文件sudo apt-get purge qemu-system-riscv # 彻底删除(推荐)
04 交叉编译
交叉编译CMake交叉编译工具链sysroot 在使用==Cmake==搭建交叉编译环境时,需要指定sysroot,这个sysroot到底是什么呢? 在嵌入式开发中,sysroot是一个为了方便移植和交叉编译而创建的特殊目录。他包含了用于目标系统的头文件、库文件。在交叉编译时,我们通常不希望用宿主机的头文件和库文件,而仅使用sysroot中的头文件和库文件,以保证生成的东西能够在目标系统运行 未设置--sysroot 设置了--sysroot=dir后 头文件搜索路径 /usr/include dir/usr/include 依赖库搜索路径 /usr/lib dir/usr/lib 如何查看sysroot可以用以下方式查看sysroot 1${CC}...
07 开发板部署nodejs
在开发板上运行node.js添加环境变量nodejs主要有2个可执行文件:node, npm他们都在同一个目录下,为了后面简单使用,需要把该目录添加到环境变量并开机自动设置 换源1npm config set registry https://registry.npmmirror.com 关闭ssl验证1npm config set strict-ssl false 安装依赖 由于js是个跨平台语言,所以只要给开发板移植了nodejs环境,就可以使用其丰富的前端代码了 安装依赖时有2种选项: 全局安装:npm install xxx -g 局部安装:npm install xxx,会在当前目录生成一个node_modules文件夹,新安装的依赖都在该目录下,切换到别的目录运行js就不行了
03 tar工具
tar工具 tar是Ubuntu中的一个可执行文件,可以用来打包文件和目录,并生成.tar格式的文件,并且可以对打包后的文件进行压缩,生成.tar.gz等格式的文件 常见参数 参数 功能 -c 创建tar包 -x 解压tar包 -v 详细展示处理文件名 -f 指定输出文件名 -z 使用gzip压缩,.tar.gz 是常见的压缩文件扩展名 -j 使用bzip2压缩,.tar.bz2 是使用 bzip2 压缩的文件扩展名 -t 查看 tar 包中的文件列表 常见参数组合 -cvf:创建tar包 -xvf:在当前目录解压tar包 -xzvf:在当前目录使用gzip工具解压tar包
02 设置环境变量
设置环境变量1.环境变量的定义环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。 2. export终端命令 export命令可用于显示或设置环境变量。 export命令的效果仅限于当前终端。 export的语法:export [-fnp] [变量名]=[变量设置值] 参数说明: -f:代表[变量名称]中为函数名称。 -n:删除指定的变量;实际未删除,只是不会输出到后续指令的执行环境中。 -p:显示所有的shell赋予子程序的环境变量。 3.Linux设置环境变量的方法3.1终端里直接用export命令export...






