
Linux
文章平均质量分 65
HMJ_
生命不止,学习不息。
展开
-
TPM 2.0 device detected but a connection cannot be established
TPM (受信任的平台模块) 可用于提高电脑的安全性。在 2016 年 TPM 版本 2.0(截至本文撰写的当前版本)成为新电脑的标准版本。通常,它是主板上单独的芯片,但 TPM 2.0 标准允许 Intel 或 AMD 等制造商将 TPM 功能构建到芯片组中,而无需单独的芯片。小主机安装ESXi8.0后,启动系统提示“检测到TPM2.0设备但无法连接”,正常安装镜像也没啥影响,但是一直有告警看着奇怪。因此改报警的提醒导致的问题就是,tpm设备无法在主机上工作,因此影响win11之类系统的安装;原创 2023-06-07 11:15:02 · 5027 阅读 · 0 评论 -
Linux获取库文件中的函数列表
函数库有些功能是可选的,如果编译时没有开启特定选项,编译生成函数库中就没有对应的接口函数,一些依赖这些接口函数的应用执行时就会出现异常,因此为了排查函数库是否包括特定函数,我们需要查看函数库文件的符号表;objdump用法如下,详细参考。readelf用法如下,详细参考。nm用法如下,详细参考。原创 2023-01-30 10:44:43 · 1425 阅读 · 0 评论 -
交叉编译构建GDB和GDBServer
交叉编译构建GDB和GDBServer转载 2022-12-15 10:28:30 · 433 阅读 · 0 评论 -
修改weston桌面背景
linux开发板采用weston桌面系统, 希望修改默认桌面图片;原创 2022-12-12 15:47:47 · 1620 阅读 · 0 评论 -
openwrt 时区设置无效问题
最近在使用 openwrt 时发现在 web 控制台设置好时区后,系统日志依然显示的是 UTC 时间,慢了 8 小时。查了下原来是 openwrt 默认没有安装 zoneinfo,安装后即可。首先在 web 端或直接修改配置文件:/etc/config/system 中的 zone 相关参数:然后输出日志日期就正常了。编译固件时,选中如下内容:在可选项中选择需要的时区信息即可;原创 2022-11-30 20:00:43 · 2332 阅读 · 0 评论 -
linux应用移植问题
公司设备降成本,设备运行平台从armv7架构mpu换成了armv5架构的mpu,应用移植过程都挺顺利的,只是牵涉到一个引用外部库的应用时,运行该应用到引用库中的函数时,应用抛出illegal instrution异常。原创 2022-11-30 15:53:50 · 659 阅读 · 0 评论 -
Vim快捷键-键位图
嵌入式linux开发中, 经常接触linux环境, 最方便的莫过于使用, 功能强大, 适用范围广, 因此了解一些vim中常见的命令对于日常工作学习大有裨益. 针对于不同阶段, 可以参考学习一下vim中的快捷键, 提升工作效率....原创 2022-07-14 13:42:43 · 649 阅读 · 0 评论 -
MLO/uboot-spl.bin和uboot.img/uboot.bin
前段时间使用TI的am4378芯片,发现系统在SD卡启动的时候,启动文件使用的是MLO和uboot.img;而Norflash和eMMC启动的时候使用的是 uboot-spl.bin和uboot.bin,有如下疑问:MLO和Uboot-spl.bin有什么区别?uboot.img和uboot.bin有什么区别?为什么后者需要Norflash再配合eMMC,而不是直接eMMC?For MLO use the spl/u-boot-spl.bin file. The difference b转载 2022-05-10 16:29:00 · 964 阅读 · 0 评论 -
开源项目中的法律风险
引言写这篇博客的契机是我厂刚好开了一次这样的培训,听了以后觉得很有收获。碰巧自己最近也在写开源项目,因此觉得还是有必要写一下。有小伙伴提到,这种问题,去网上找那个指导你如何选择 LICENSE 的图就好了。那个图能指导你选择正确的许可协议,但是并不会增进你对各个协议的了解。本文里会通过几个例子让读者更能了解这些协议。软件的分类我们先来看看软件一共分为几种:软件分类版权保护开放源码再分发修改商业软件√不一定××开源软件√√√√共有软件×不一转载 2022-04-09 20:21:42 · 881 阅读 · 0 评论 -
使用Squashfs和Overlayfs提高嵌入式Linux文件系统可靠性
在使用嵌入式 Linux 系统的时,会出现由于设备意外断电引起文件系统损坏而最终使该设备无法启动的现象。为了应对这种情况,通常会从硬件设计如采用备用电源,无论是锂电池还是超级电容等,或者从系统软件设上加以规避。本文接下来将介绍如何使用 squashfs 只读文件系统制作 Linux 系统文件,并采用 overlayfs 为用户目录增加可写权限。演示采用 Colibri iMX6 计算机模块,该方法同样也适用于 Toradex 其他产品,如 iMX8 计算机模块。Squashfs 是一种只读压缩文件系统,通转载 2022-03-31 13:25:27 · 1290 阅读 · 0 评论 -
GDB调试100个小技巧
《100个gdb小技巧》 - hellogcc挺有趣的一本关于GDB调试的文章, 看文章有时候调试会帮你省下不少事情, 例如:设置被调试程序的参数技巧可以在gdb启动时,通过选项指定被调试程序的参数,例如:$ gdb -args ./a.out a b c也可以在gdb中,通过命令来设置,例如:(gdb) set args a b c(gdb) show argsArgument list to give program being debugged when it is starte转载 2022-03-29 10:20:02 · 1164 阅读 · 0 评论 -
Linux进程间通信-消息队列
什么是消息队列消息队列(Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的资料,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。消息队列的优缺点消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息,这和大多数通信协议是不同的。例如WWW中使用的HTTP协议(原创 2022-03-23 15:43:14 · 5965 阅读 · 1 评论 -
linux常用用户管理指令
添加用户adduseradduser会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码;adduser apple输出显示:在创建用户名时,同事创建了用户的主目录以及密码; 默认情况下, adduser在创建用户时会主动调用 /etc/adduser.conf; 在创建用户主目录时默认在/home下,而且创建为 /home/${用户名}; 默认为用户指定shell版本为/bin/bash;如果主目录已经存在,就不再创建,但是此主目录虽然作为新用户的主目录,而且默认登原创 2022-03-16 09:44:00 · 536 阅读 · 0 评论 -
git 项目同步一直要验证
问题使用公司的编译服务器搞项目时, 发现git同步代码, 每次都要验证, 输入用户名和密码, 觉得很麻烦; 之前在自己的虚拟机里都是不需要的, 于是搜集了下解决办法;解决更改项目配置文件更改认证配置在git项目文件夹下输入:echo "[credential]" >> .git/configecho " helper = store" >> .git/config或者vim .git/config#文件末尾插入下面两行[credential] h原创 2022-03-08 18:59:12 · 1125 阅读 · 0 评论 -
服务器load average
If you’re using a Linux server, you’re probably familiar with the term load average/system load. Measuring the load average is critical to understanding how your servers are performing; if overloaded, you need to kill or optimize the processes consuming hi转载 2022-01-21 11:04:56 · 347 阅读 · 0 评论 -
UCI添加命名段
背景使用OPENWRT的参数配置系统uci的时候,如果要在一个配置文件下创建不同的命名域发现该系统未提供直接方法;配置文件命名段和选项不同,通过set指令设置选项,不存在则会创建该字段,而设置命名段不存在会直接报错。因此稍微了解了下uci如何添加命名段;结果创建配置文件,/etc/config是uci系统的默认配置目录.touch /etc/config/appconfig添加匿名段,需指定其类型,此处指定为appuci add appconfig app通过系统分配的唯一段id,来进原创 2021-10-21 15:26:08 · 418 阅读 · 0 评论 -
一些有趣的事实:关于 Wlan 和 Bridge
背景尝试将笔记本电脑的 WiFi 网络在二层共享给qemu虚拟机,想当然地就执行了以下命令: $ sudo brctl addbr br0 $ sudo brctl addif br0 wlan0 can't add wlan0 to bridge br0: Operation not supported发现wifi Station模式的限制wifi 标准限定 Station 模式下的接口不能与其他接口直接桥接;参考:https://superuser.com/questions/5978转载 2021-09-03 20:26:05 · 2801 阅读 · 0 评论 -
OpenWRT之procd服务
简介Openwrt 支持模块化编程,增加新功能非常简单。但是一些基础模块必须包含, 它们是OpenWrt核心。如:实用基础库libubox、系统总线ubus、网络接口管理模块netifd、核心工具模块ubox、服务管理模块procd。在OpenWRT系统内init进程被procd取代,procd作为父进程可以监控子进程的状态。一旦子进程退出后即可在某一个时刻尝试进行重启进程。它通过init脚本来将进程信息加入到procd的数据库中来管理进程启动,这是通过ubus总线调用来实现,可以防止进程的重复启动调用原创 2021-08-17 10:21:44 · 5701 阅读 · 0 评论 -
linux shell 字符串操作详解
在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快。一、判断读取字符串值表达式含义${var}变量var的值, 与$var相同${var-DEFAULT}如果var没有被声明, 那么就以$DEFAULT作为其值 *${var:-DEFAULT}如果var没有被声明, 或者其值为空,转载 2021-08-17 09:34:28 · 648 阅读 · 0 评论 -
Ubuntu安装CMake
使用PPA安装sudo apt-get install software-properties-commonsudo add-apt-repository ppa:george-edison55/cmake-3.xsudo apt-get update#安装sudo apt-get install cmake#已安装升级sudo apt-get upgrade本地编译安装最新版...原创 2019-05-28 09:15:04 · 1368 阅读 · 0 评论 -
设置linux生成Coredump文件
问题在做嵌入式linux开发的时候,有时候为了快速定位应用崩溃的问题, 采用printf的方式可能比较慢, 这时候我们如果采用coredump文件分析则会快一些, 但是一般情况下linux下coredump选项是默认关闭的, 因此如何打开并且设置coredump对应的输出文件格式就是我们本篇文章的重点.方法设置生成的coredump大小通过使用 ulimit -c 指令查询当前设置, 通过 ulimit -c [unlimited] | {size}设置coredump, 如果值为0, 则关闭生成c原创 2021-08-08 18:14:14 · 802 阅读 · 0 评论 -
linux获取文件绝对路径
问题linux 使用中, 我们经常遇到需要文件路径来解析寻找文件, 经常用的pwd指令只能打印当前文件路径, 不能很好的满足我们的需求, 于是我们就需要一个指令可以快速获取文件全路径.结果realpath指令realpath ${file}显示文件解析后的路径, 会将符号链接转化为真是的路径位置;例如: /home/aaa/${SLINK}/myfile, 其中${SLINK}指向 /Test/bbb 目录, 则realpath myfile 则显示为 /Test/bbb/myfile;原创 2021-08-08 16:22:56 · 9381 阅读 · 0 评论 -
linux中查找文件并显示查找到的文件详细信息
在linux中有时候我们需要搜索文件, 但是通配符搜索会出现很多同名文件这时候就需要通过文件大小来进行简单筛选和确定文件, 因此需求就出现了;find ./ -name ${target} -size +1G -exec ls -lh {} \;其实就是将find的结果, 通过 -exec选项执行命令ls -lh, 其中 {} 代表搜索找到的文件名;参考文章find命令并显示文件大小...原创 2021-08-04 12:11:07 · 3176 阅读 · 0 评论 -
Linux 查看.a静态库
linux中经常引用一些静态.a库, 或者.so动态库; .a静态库其实是由ar指令创建的归档文件,如果想要查看其内容有以下方式.ar指令ar -t *.a -t Display a table listing the contents of archive, or those of the files listed in member… that are present in the archive.展示静态库的文件组成列表;nm指令nm *.a展示静态库的符号列表, 会原创 2021-08-04 11:11:39 · 7563 阅读 · 0 评论 -
gcc和g++的关系
GCC 是 GNU 编译器集合的意思, 对于用户能用的常用命令, 有 gcc 和 g++.无论是 gcc 还是 g++, 他们的定位都是 driver. driver 负责调用编译器(狭义), 把源码编译到汇编代码. 比如 C 语言的编译器(狭义)是 cc1, 而 C++ 语言的编译器(狭义)是 cc1plus. driver 再调用 as, 把汇编代码变成二进制代码. 最后调用 ld, 负责把二进制代码拼在一起.gcc 和 g++ 的区别无非就是调用的编译器不同, 并且传递给链接器的参数不同.具体转载 2021-06-26 17:21:48 · 417 阅读 · 0 评论 -
Linux中新建terminal窗口或者页面
teriminal中创建新窗口和新标签页使用gnome-terminal指令#创建新标签页gnome-terminal --tab#创建新窗口gnome-terminal --window使用快捷键#创建新窗口ctrl+shift+n#orctrl+alt+t#创建新标签页ctrl+shift+t参考文章How to open new tab in existing terminal session and using keyboard shortcut /原创 2021-06-02 10:48:43 · 6831 阅读 · 0 评论 -
格式化U盘为FAT32
使用fdisk格式化U盘查看硬盘挂载点df 卸载挂载的硬盘umount /media/xxx/8CDA-0A87擦除硬盘分区信息mkfs.vfat /dev/sdb -I创建新的分区#fdisk打开硬盘/dev/sdbsudo fdisk /dev/sdb#创建新分区n#选择创建主分区p#选择分区数目1#输入起始扇区,使用默认值[enter]#输入结束扇区,使用默认值[enter]修改分区类型默认创建的分区类型为Linux我们的目标原创 2021-05-28 15:13:23 · 5721 阅读 · 1 评论 -
串口工作模式设置
Linux串口默认是标准模式(Canonical Mode),该模式为阻塞模式并且支持用户行编辑,输入数据一行一行获取,通过输入行分割符确认一行,包含行分割符支持最大4096个字符;该模式在通过串口传输数据时很不方便,因此我们需要串口的其它模式。串口RAW模式在头文件termios.h(termios函数描述了一个通用终端接口用于控制异步通信端口)中,存在着结构体 termios, 该结构体至少包含以下成员: tcflag_t c_iflag; /* input modes */ tc原创 2021-04-19 18:08:22 · 2606 阅读 · 0 评论 -
Linux前台运行中脚本转后台运行
问题linux中有时候我们可能会跑脚本测试服务之类的, 测试可行后大多会重新后台执行脚本运行; 可也不免有时候会有程序启动后,想直接转到后台运行, 不想再重新拉起.方法运行命令按 Ctrl-Z 挂起这个命令运行 jobs 命令,查看作业号。例如:[1]+ Running myscript.sh将需要的作业放到后台运行:bg 1.我们常用的指令是ctrl+z挂起任务, 然后fg, 再次执行最近挂起的任务, 从字面来看, bg和fg就是一对相对的指令(background 和 foregro原创 2021-03-23 10:04:49 · 747 阅读 · 1 评论 -
linux中蜂窝网络模块控制工具comgt
简介comgt 是一个 GlobeTrotter GPRS/EDGE/3G/HSDPA 和 Vodafone 3G/GPRS 模块控制工具。它是一种脚本语言解释器,用于在串行线路建立通信, 并通过PCMCIA 调制解调器以及GPRS和3G模块一样.用法概要comgt -d device -ehstvVx script选项-d device :指定模块的通讯口,例如 /dev/ttyUSB2 或 /dev/modem-e:打开串口通信的 echo-h :显示帮助信息-s :在外部脚本执行原创 2021-02-24 19:58:01 · 1666 阅读 · 0 评论 -
Linux Terminal终端常用快捷键
常用:Ctrl L : 清屏Ctrl M : 等效于回车Ctrl C : 中断正在当前正在执行的程序Ctrl Alt T : 打开一个新的终端terminal,也就是一个新的窗口window;Ctrl Shift T : 在已有终端上打开一个新的tab,而不是窗口window;Ctrl Shift N : 在已有终端上打开另一个新的终端,即一个新的窗口;Ctrl D : 关闭一个tab,如果终端有多个tab,只关闭当前tab, 只有一个tab则关闭窗口;Ctrl Shift W ..原创 2021-02-08 14:00:07 · 1829 阅读 · 0 评论 -
嵌入式设备获取公网IP的办法
问题最近有些设备出现问题,想通过服务器反查,但是通过设备ID未查找到该设备,因此想通过设备的IP来确认该设备是否连接过服务器;但是嵌入式端很多linux工具都不可用,如果需要自己写程序,但是已发出的设备又没有该程序;方法设备采用的是嵌入式linux,其中的工具箱busybox中有轻量级的wget应用,因此可以用改应用获取设备公网IP;wget -q -O - myip.ipip.net #将获取的结果,写到标准输出中,后者是打印ip的一个服务,也可以自建;-q将下载过程隐藏如果设备中存在curl原创 2021-01-12 16:58:33 · 910 阅读 · 0 评论 -
Git stash暂存工作环境
问题今天在修改一个定制分支, 分支的内容还没有修改完毕, 但是这时候另一个事情插了进来, 需要切换到另一个分支下, 而且那个事更急一些, 于是就需要保存目前的修改现场; 想来之前学习Git使用时, 知道有保存现场的指令, 但一直没啥使用场景, 这次正好用到, 做下记录.结果先看Git手册(man git stash)的描述:将所有脏的工作目录储藏起来; 从上也可以看出我们执行git stash其实是执行git stash push省略了push.因此看到后很直观, 我就直接执行了git stas原创 2020-12-15 16:05:56 · 241 阅读 · 0 评论 -
uci: Parse error (invalid command) at line 0, byte 0
问题今天在研究OpenWRT的保活进程procd, 了解到如果要重新拉起进程, 可以通过设置触发函数来调用service_reload()实现服务重启;service_triggers(){ procd_add_reload_trigger "<uci-file-name>" "<second-uci-file>" procd_add_reload_interface_trigger <interface>}但是设置了触发修改的原创 2020-12-07 17:18:42 · 4820 阅读 · 0 评论 -
Git删除提交历史记录
第一种方法删除.git文件夹或许会使我们的git仓库出现问题,如果我们想删除所有的提交记录并保持代码在当前状态可以试试下面的方法:# Check out to a temporary branch:git checkout --orphan TEMP_BRANCH# Add all the files:git add -A# Commit the changes:git commit -am "Initial commit"# Delete the old branch:git br翻译 2020-11-26 17:26:21 · 3313 阅读 · 0 评论 -
Ubuntu20.04国内源
问题安装win下linux子系统,缺少组件比较多,安装组件时国外源速度太慢,更换为国内源;办法离阿里比较近,默认选择阿里源。执行以下指令sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak #备份官方镜像源 vi /etc/apt/sources.list #新建镜像源文件i #进入编辑模式鼠标右键 #子系统界面继承win控制台的操作习惯,粘贴复制的内容<esc>:x #退出并保存阿里源:deb http://mi原创 2020-11-17 14:31:07 · 1466 阅读 · 0 评论 -
Linux中获取设备IP
获取设备外网IP本质上都是访问,服务器服务器拿到请求的IP显示出来;curl ifconfig.mecurl -4/-6 icanhazip.comcurl ipinfo.io/ipcurl api.ipify.orgcurl checkip.dyndns.orgdig +short myip.opendns.com @resolver1.opendns.comhost myip.opendns.com resolver1.opendns.comcurl ident.mecurl bot原创 2020-11-16 18:35:29 · 452 阅读 · 0 评论 -
获取设备的接口名、ip、子网掩码、MAC、网关信息
问题今天一个项目需要在Linux中获取这些信息,查了一番资料得到了解答。办法接口名、ip、子网掩码、MAC通过ioctl接口获得,网关通过执行route指令,查询内核路由表获得:#include <stdio.h>#include <string.h>#include <unistd.h>#include <net/if.h>#include <sys/ioctl.h>#include <arpa/inet.h>#i原创 2020-11-09 19:12:20 · 786 阅读 · 0 评论 -
获取设备网关的办法
问题今天在写代码的时候需要在Linux下获取设备的网关,但是找了好久发现都是通过linux指令 route、netstat -r打印路由表,解析路由表获得,或者通过cat /pro/net/route查看内核进程文件读取路由信息,基本没有使用C接口获取网关的示例。结果面向搜索引擎编程,在stackoverflow上看到了相关问题Getting gateway to use for a given ip in ANSI C,看到后大喜过往,不过看到了回答者给的示例,如下:#include <ne原创 2020-11-09 16:45:21 · 1011 阅读 · 0 评论 -
bash shell中30条便利aliases指令
Anbash shell aliasis nothing but the shortcut to commands. The alias command allows the user to launch any command or group of commands (including options and filenames) by entering a single word. Use alias command to display a list of all defined aliase..转载 2020-11-04 20:11:03 · 1211 阅读 · 1 评论