
linux
文章平均质量分 73
omnibots
这个作者很懒,什么都没留下…
展开
-
编译linux内核时,让版本号不跟着git变化
导致报错,modprobe: can’t change directory to ‘4.1.15-00005-g482731e4-dirty’: No such file or directory。修改脚本文件,scripts/setlocalversion。取消 CONFIG_LOCALVERSION_AUTO宏。内核每次重新编译时,uname -r都会跟着变。如果不想要有4.1.15+,请参照方法二。这样配置编译后,版本号变为4.1.15+这样版本号4.1.15永远不会变了。原创 2024-08-22 22:02:24 · 350 阅读 · 0 评论 -
解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题
如果还出现烧录报错的情况,请检查配置信息是否正确,除了这个也有可能是没有权限读写串口,可以修改串口权限。上文已经可以识别到串口设备了,但是乌龙的是vscode esp-idf插件居然不能选择。正好刚刚升级驱动时源码还没删,所以可以直接改驱动,把节点改为ttyS开头的即可。执行lsusb,发现可以检测到ch340设备,但是/dev下却没有设备节点。然后经过我的仔细观察,他好像过滤了ttyS开头的串口。然后继续编译,报错,函数原型不一致。重新插拔一次,就可以识别到了。重新拔插后,发现可以选择了。原创 2024-08-22 22:01:27 · 1477 阅读 · 1 评论 -
libsodium、minisign交叉编译和使用minisign对文件签名及验签
给CMakeLists.txt打补丁。执行cmake生成Makefile。原创 2023-06-16 13:09:10 · 403 阅读 · 0 评论 -
使嵌入式Linux支持exFAT和NTFS文件系统,U盘自动挂载
把内核烧录挂载个exFAT U盘试试成功没。原创 2023-06-16 13:07:45 · 2576 阅读 · 0 评论 -
C语言使用readline库实现带tab补全命令的shell终端
【代码】C语言使用readline库实现shell终端。原创 2022-12-30 19:29:53 · 1154 阅读 · 1 评论 -
curl交叉编译使其支持ldap和ldaps协议
需要把openssl、openldap、curl安装目录下的lib考到板子的lib目录,curl安装目录下的bin靠板子的bin目录。地址:ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/地址:https://www.openssl.org/source/地址:https://curl.se/download/原创 2022-11-24 16:45:17 · 1119 阅读 · 0 评论 -
linux查看端口占用
【代码】linux查看端口占用。原创 2022-11-12 21:03:29 · 564 阅读 · 0 评论 -
iptables/ip6tables报错
在这里选择’xxx’对应的功能即可。内核不支持相应协议过滤支持,需要配置内核。原创 2022-10-24 09:22:09 · 861 阅读 · 0 评论 -
ipcalc交叉编译
项目地址:https://github.com/nmav/ipcalc https://gitee.com/a_little_progress/ipcalc。原创 2022-10-19 08:43:20 · 241 阅读 · 0 评论 -
控制脚本(shell13)
在使用作业控制命令时,如果未在命令行指定任何作业号,该作业会被当成作业控制命令的操作对象。任何时候都只有一个带加号的作业和一个带减号的作业,不管shell中有多少个正在运行的作业。有作业时, atd守护进程会检查作业设置运行的时间。如果某个作业在cron时间表中安排运行的时间已到,但这时候Linux系统处于关机状态,那么这个作业就不会被运行。取而代之的是, Linux系统会将提交该作业的用户的电子邮件地址作为STDOUT和STDERR。作业队列的字母排序越高,作业运行的优先级就越低(更高的nice值)。原创 2022-09-10 16:54:25 · 924 阅读 · 0 评论 -
linux4.15内核ILI9341LCD屏并口16线RGB565驱动
【代码】linux4.15内核ILI9341LCD屏并口16线RGB565驱动。原创 2022-09-05 09:05:11 · 1068 阅读 · 0 评论 -
呈现数据 (shell12)
STDIN文件描述符代表shell的标准输入。对终端界面来说,标准输入是键盘。 shell从STDIN文件描述符对应的键盘获得输入,在用户输入时处理每个字符。在使用输入重定向符号(原创 2022-09-04 13:50:16 · 213 阅读 · 0 评论 -
可执行文件的装载与进程(链接、装载与库05)
硬件决定了地址空间的最大理论上限,即硬件的寻址空间大小,比如32位的硬件平台决定了虚拟地址空间的地址为0到2的32次方-1,即0x00000000 OxFFFFFFFF,也就是我们常说的4GB虚拟空间大小:而64位的硬件平台具有64位寻址能力,它的虚拟地址空间达到了2的64次方-1字节,即0x0000000000000000~0 xFFFFFFFFFFFFFFFF,总共17179869184GB,这个寻址能力从现在来看,几乎是无限的。“Segment”的概念实际上是从装载的角度重新划分了ELF的各个段。..原创 2022-08-28 17:07:09 · 593 阅读 · 0 评论 -
处理用户输入(shell11)
位置参数变量是标准的数字: $0是程序名, $1是第一个参数, $2是第二个参数,依次类推,直到第九个参数$9。所以,变量$3的值会移到$2中,变量$2的值会移到$1中,而变量$1的值则会被删除(注意,变量$0的值,也就是程序名,不会改变)。用set命令能够做到。然后,该方法会将原始脚本的命令行参数传给getopt命令,之后再将getopt命令的输出传给set命令,用getopt格式化后的命令行参数来替换原始的命令行参数,看起来如下所示。当输入的字符达到预设的字符数时,就自动退出,将输入的数据赋给变量。..原创 2022-08-27 20:07:02 · 585 阅读 · 0 评论 -
IMX6UL系列小屏驱动之像素时钟无法修改
官方配置的时钟源,像素时钟最低只能8437500HZ,设置低于8437500HZ最后出来的时钟还是8437500HZ。修改完重新烧录,测波形,像素时钟已经可以降到8mhz以下了。,使它支持设备树修改父时钟。更换父时钟,修改设备树中的。LCD可选父时钟,在。...原创 2022-08-26 13:03:18 · 1228 阅读 · 0 评论 -
静态链接(链接、装载与库04)
链接脚本由一系列语句组成,语句分两种,一种是命令语句,一种是赋值语句。语句之间使用分号作为分隔符表达式与运算符注释和字符引用/**/原创 2022-08-20 19:38:51 · 727 阅读 · 2 评论 -
更多的结构化命令(shell10)
只有测试命令的退出状态码不为0, bash shell才会执行循环中列出的命令。循环语句可以在循环内使用任意类型的命令,包括其他循环命令。注意,在使用嵌套循环时,你是在迭代中使用迭代,与命令运行的次数是乘积关系。while命令允许定义一个要测试的命令,然后循环执行一组命令,只要定义的测试命令返回的是退出状态码0。在处理代码量较大的脚本时,可能在一个地方需要修改IFS的值,然后忽略这次修改,在脚本的其他地方继续沿用IFS的默认值。在处理多个循环时, break命令会自动终止你所在的最内层的循环。原创 2022-08-20 17:47:31 · 93 阅读 · 0 评论 -
使用结构化命令(shell9)
如果该命令的退出状态码(参见第11章)是0(该命令成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他值, then部分的命令就不会被执行, bash shell会继续执行脚本中的下一个命令。当if语句中的命令返回退出状态码0时, then部分中的命令会被执行,这跟普通的if-then语句一样。当if语句中的命令返回非零退出状态码时, bash shell会执行else部分中的命令。除了test命令使用的标准数学运算符,下表列出了双括号命令中会用到的其他运算符。原创 2022-08-20 17:46:20 · 289 阅读 · 0 评论 -
linux下使用fw_printenv读取、fw_setenv修改uboot环境变量
fw_setenv和fw_printenv共用一个文件,只是通过程序名来区分不同功能,所以我们在开发板创建一个fw_setenv的软连接就可以了。得到fw_printenv和fw_setenv后还不能正常使用,还需要把tools/env/fw_env.config拷到板子/etc目录下。这些都配置对了之后就可以使用fw_printenv和fw_setenv进行读取和修改uboot环境变量分区的变量了。编译完后,tools/env下面就有fw_printenv,把它拷到板子上就行了。配置完就可以开始编译了。.原创 2022-08-12 16:07:46 · 4755 阅读 · 0 评论 -
uboot mtdparts报错unexpected character
原因是环境变量mtdparts后面多出了一个空格,删掉即可。删掉后面空格之后就正常打印分区信息了。原创 2022-08-11 14:44:04 · 454 阅读 · 0 评论 -
ubifs镜像文件制作及其烧录
为1974-1908*128/1024=8.25M,ubinize.cfg文件中vol_size要为最大卷大小减去8.25M。原因是最后的卷大小超过了分区大小。擦除时没有把整个分区擦除掉,比如ubi.img只有80M,但是根文件系统分区有230M,擦除时不能只擦除80M,而要擦除230M,因为为擦除的部分会被ubi driver判定为垃圾数据,则认为镜像已损坏。注意,卷大小建议设置为分区大小减去8-10M,可能是因为ubinize加上了一些ubifs相关的信息,最后会使卷大小比你设置的大8-10M。...原创 2022-08-08 13:35:39 · 1377 阅读 · 0 评论 -
目标文件里有什么(链接、装载与库03)
在函数或者全局变量前加入_attribute_((section(“name”)))属性就可以把相应的变量或函数放到以“name"作为段名的段中。原创 2022-08-07 09:07:54 · 153 阅读 · 0 评论 -
静态链接(链接、装载与库02)
直接在语法树上作优化比较困难,源代码优化器会将整个语法树转换成中间代码,它是语法树的顺序表示,已经非常接近目标代码了。重定位做的就是给程序中每个这样的绝对地址引用的位置打补丁,使他们指向正确的地址。编译器所能分析的语义是静态语义,指在编译期间可以确定的语义。相对的是动态语义,运行期间才能确定的语义。最后目标代码优化器对目标代码进行优化,比如选择合适的寻址方式、使用位移代替乘法运算、删除多余的指令等。yacc语法分析器,可以根据用户给定的语法规则对输入的记号序列进行解析,生成一棵语法树。...原创 2022-08-06 17:51:38 · 224 阅读 · 0 评论 -
温故知新(链接、装载与库01)
多核处理器,指的是将多颗核心封装在一颗CPU上,共享昂贵的缓存部件,价格比普通处理器高一点而已,多核可以看成是SMP的简化版本,宏观上SMP和多核并无太大区别。解决了多对一模型中因为用户线程阻塞而引起全部线程阻塞的缺点,在多处理上增加处理器对性能提升有一定帮助,但和一对一模型比还是少一些,继承了多对一模型的全部优点。线程之间的并发是真正的并发,一个线程因为某原因阻塞时,其他线程执行不会受到影响。该模型将多个用户线程映射到一个内核线程上,线程之间的切换由用户态代码进行,因此比一对一模型在线程切换上要快很多。.原创 2022-08-06 17:49:39 · 346 阅读 · 0 评论 -
构建基本脚本(shell08)
在第一个命令产生输出的同时,输出会被立即送给第二个命令。一个简单的记忆方法就是:在命令行上,命令总是在左侧,而重定向符号“指向”数据流动的方向。最基本的重定向将命令的输出发送到一个文件中。按照惯例,一个成功结束的命令的退出状态码是0。shell脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。默认情况下, shell脚本会以脚本中的最后一个命令的退出状态码退出。它的值会变成由shell所执行的最后一条命令的退出状态码。之前显示器上出现的命令输出会被保存到指定的输出文件中。...原创 2022-08-06 17:44:46 · 407 阅读 · 0 评论 -
安装软件程序(shell07)
举个例子,在LinuxMint的sources.list文件中,你能看到混用了Linux Mint和Ubuntu的软件仓库。到目前为止,最常用的命令行工具是aptitude,这是有原因的。可以用方向键在菜单上移动。尽管aptitude可以帮忙解决安装软件时遇到的问题,但解决有依赖关系的多个包的更新会比较烦琐。如果你已经知道了系统上的那些软件包,只想快速显示某个特定包的详细信息,就没必要到aptitude的交互式界面。无法通过aptitude看到的一个细节是所有跟某个特定软件包相关的所有文件的列表。...原创 2022-08-06 17:43:09 · 885 阅读 · 0 评论 -
管理文件系统(shell06)
fdisk 创建了基本的Linux分区之后 ,需要通过t命令改变分区类型分区类型8e表示这个分区将会被用作Linux LVM系统的一部分,而不是一个直接的文件系统下一步是用分区来创建实际的物理卷。这可以通过pvcreate命令来完成。pvcreate定义了用于物理卷的物理分区。它只是简单地将分区标记成Linux LVM系统中的分区而已。别被吓人的消息dev_is_mpath: failed to get device for 8:17或类似的消息唬住了。...原创 2022-08-06 17:41:31 · 569 阅读 · 0 评论 -
理解Linux文件权限(shell05)
然后通过chgrp命令将目录的默认属组改为包含所有需要共享文件的用户的组(你必须是该组的成员)。/etc/passwd文件中的密码字段都被设置成了x ,现在,绝大多数Linux系统都将用户密码保存在另一个单独的文件中(叫作shadow文件,位置。对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。系统上的任何用户都能改自己的密码,但只有root用户才有权限改别人的密码。默认情况下, userdel命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件。...原创 2022-08-06 17:40:17 · 365 阅读 · 0 评论 -
使用Linux环境变量(shell04)
查看全局变量,可以使用env或printenv命令显示个别环境变量的值,可以使用printenv、echo 命令全局环境变量可用于进程的所有子shell部环境变量只能在定义它们的进程中可见set命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。通过等号给环境变量赋值,值可以是数值或字符串变量名、等号和值之间没有空格 如果在赋值表达式中加上了空格,bash shell就会把值当成一个单独的命令通过export命令来完成,变量名前面不需要加$修改子shell中全局环境变量原创 2022-08-06 17:38:36 · 361 阅读 · 0 评论 -
理解shell(shell03)
这里要注意的是,bash命令的历史记录是先存放在内存中,当shell退出时才被写入到历史文件中。对于有多种实现的命令,如果想要使用其外部命令实现,直接指明对应的文件就可以了。相比外部命令,内建命令提供了更高的性能,但shell中包含的内建命令越多,消耗的内存就会越大,而有些命令几乎永远也不会用到。因为既不需要通过衍生出子进程来执行,也不需要打开程序文件,内建命令的执行速度要更快,效率也更高。当外部命令执行时,会创建出一个子进程。括号的加入使命令列表变成了进程列表,生成了一个子shell来执行对应的命令。..原创 2022-08-06 17:36:43 · 647 阅读 · 0 评论 -
更多的bash shell命令(shell02)
用户在top命令的输出上有很大的控制权。df命令的输出值显示的是Linux系统认为的当前值。后面两个参数定义了该存储设备的设备文件的位置以及挂载点在虚拟目录中的位置。它会把输出中的磁盘空间按照用户易读的形式显示,通常用M来替代兆字节,用G替代吉字节。S:进程的状态( D代表可中断的休眠状态, R代表在运行状态, S代表休眠状态, T代表跟踪状态或停止状态, Z代表僵化状态)。sort命令是对数据进行排序的 ,默认情况下, sort命令按照会话指定的默认语言的排序规则对文本文件中的数据行排序。...原创 2022-08-06 17:34:50 · 345 阅读 · 0 评论 -
基本的bash shell命令(shell01)
硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。要创建硬链接,原始文件也必须事先存在,只不过这次使用ln命令时不再需要加入额外的参数了。less命令的操作和more命令基本一样,一次显示一屏的文件文本。它允许你在其他进程使用该文件时查看文件的内容。tail命令会保持活动状态,并不断显示添加到文件中的内容。符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。要想在不同存储媒体的文件之间创建链接,只能使用符号链接。...原创 2022-08-06 17:31:43 · 276 阅读 · 0 评论 -
rockpi4b刷入安卓11镜像后跑不起来
历经了千辛万苦总算是把安卓11成功编译了,但是当把镜像烧入sd卡,然后把rockpi4b插卡上电时却跑不起来。开机log如下:现象是在随机位置挂掉,在rom阶段、uboot阶段、kernel阶段都有可能挂掉原因是我电脑主机usb供电带不动rockpi4b,后面换成了充电宝供电就成功跑起来了。rockpi4b正常跑起来时绿灯常亮、蓝灯闪烁成功上电的log:...原创 2022-06-26 15:36:29 · 1414 阅读 · 0 评论 -
rockpi4b 烧写固件到SD卡
点我直达1.选择固件固件是通过虚拟机SAMBA服务映射到windows的2.开始烧写报错信息失败原因可能是balenaEtcher工具不支持网络读写,后面我把镜像文件拷贝到windows上,就可以正常烧写了。原创 2022-06-26 10:42:05 · 2366 阅读 · 2 评论 -
VMware虚拟机 ubuntu20.04编译rockpi4b 安卓11系统
点我直接下载以下所有配置都是针对于20.04版本的,如需其他版本配置请看参考文档1-7,谷歌的文档可能需要梯子才可以访问安装和配置依赖库安装下载repo工具repo只支持python3.5以上版本,需要升级python后才能正常使用在.bashrc末尾追加以下信息,然后关掉当前终端,重新打开一个,使环境变量生效下载安卓11源码如果没有设置git邮箱和名字的需要先设置一下初始化repo然后会看到如下打印,输入Y和N都可以,我选的n然后开始同步源码有如下类似的报错信息,not a val原创 2022-06-25 22:43:50 · 2531 阅读 · 0 评论