LOADING

加载过慢请开启缓存 浏览器默认开启

Hexo

Linux内核编译和适配

2025/1/24

@文章首版


前言

buildroot是一个比较时候嵌入式的系统,虽然里面包含了很多软件,但有时我们想仅升级某一个版本时或在新的系统版本中依然可以使用一些老版软件应用。这里仅简单介绍下一些重点,并对一些问题进行概要的总结和操作引导。


一、buildroot一些常见的用法

1.文件夹进行简单说明

目录说明如下(示例):

                
1234567891011121314151617181920
line
                
.├── arch #系统所支持的 CPU 架构相关的代码├── board #每种类型板卡的iso等制作脚本├── boot #启动方式如grub和uboot这样的├── configs #板卡配置和内核中的配置比较类似,不过这个用于系统构建├── dl #下载包的路径,可以手动添加(如果网速不好,或者不能用网情况下,直接添加,不会影响编译结果)├── docs├── fs #将工具和软件打包成文件系统的制作脚本├── linux #内核编译相关的脚本├── output #最后生成的脚本,包括解压好的包,以及内核源码 ├── build #存放解压好的软件包和内核 ├── host #工具链,应该相当于copy一份 ├── images #生成的文件系统,内核,最后的iso等都放在这里 ├── staging -> $(TOPDIR)/output/host/aarch64-buildroot-linux-gnu/sysroot #$(TOPDIR)表示顶层目录,可以看到是链接进了host目录下。作用是存放构建过程中的中间文件,如交叉编译工具链和根文件系统的一些工具等。 └── target #文件系统,一个没有压缩的文件系统├── package #存放的软件包的一些命令(仅只有一些执行命令和patch,和fs文件夹类似),作用是配置下载的路径,编译方法,以及hash验证。更换和添加软件包时,需要修改这里├── support #存放buildroot 本身相关的工具、脚本和补丁├── system #包含启动和引导时使用的基本系统文件。├── toolchain #包含了交叉编译器以及相关的库和头文件等工具链└── utils #包含了各种实用工具(buildroot的一些自制脚本)
line

2.常见命令使用

命令如下(示例):

                
12345678910111213
line
                
make menuconfig #配置选项make busybox-menuconfig #同上make linux-menuconfig #同上make savedefconfig #保存配置到config中,最先选中的配置有关make app-rebuild #重新构建这个软件包(包括busybox),如果软件包配置有更新需要用一下make host-app #编译host软件,需要单独加这个前缀make sdk #一种交叉工具链的扩充,一些头文件和库不用再手动添加进交叉工具链中make linux-update-defconfig #更新内核配置文件。 PS:一般用不上make show-info #显示有用的系统信息,包括构建主机上的编译器、工具链等。 PS:一般用不上make toolchain #构建交叉编译工具链。 PS:一般用不上make source #下载所有软件包的源代码。 PS:一般用不上make linux-reconfigure #在修改内核配置后重新配置和重建内核镜像。 PS:一般用不上make graph-depends #生成Buildroot软件包之间的依赖关系图。 PS:没执行成功
line

二、问题整理和修改软件包版本

1.一些问题整理

(1)如何下载比较慢可以更换镜像源

只需要在修改这个配置选项BR2_PRIMARY_SITE
在这里插入图片描述

(2)如下问题所示,问题是LD_LIBRARY_PATH环境变量多添加了一个“:” ,去掉即可

在这里插入图片描述

(3)如下问题所示,问题是PATH环境变量添加有” \t\n”,添加下面命令即可去除。

                
1
line
                
export PATH=$(echo $PATH | tr -d ' \t\n')
line

在这里插入图片描述

(4)问题总结

buildroot出现的问题:
这里需要提一下:host软件用的编译器是本地使用的gcc等工具链,非host软件则是使用的交叉编译器的工具链等。

出错问题大概原因及解决
大写的变量①本地环境变量 ②buildroot中配置未添加或添加未找到等错误
编译时出现头文件缺少或无法无法找到的结构体等(host软件)①缺少库情况下:本地环境添加库文件 ②库版本较低或较高:本地环境卸载版本后安装指定版本
编译时出现头文件缺少或无法无法找到的结构体等(非host软件)交叉编译器缺少相应的库或版本不够:①更换这个软件的其他版本让它可以继续使用现在的编译器;②手动下载相关库并交叉编译后放到交叉编译链的指定目录下

2.更换软件包版本

在需要更换软件版本的情况下,以下是两种比较轻松的方式。

(1)patch和.mk文件没有什么变化,直接修改mk文件版本号和添加hash值即可

在这里插入图片描述

(2)patch和.mk文件差异比较大的情况下,建议直接更换这个目录下的所有东西,这是最方便也是稳妥的一种方式。PS:更换的这个版本一般从以前的老版本找就行。

在这里插入图片描述

3.关于.mk文件的一些变量介绍,可以帮助添加软件包

介绍如下(示例):

                
1234567891011121314151617181920212223
line
                
NAME #软件包的名称,Buildroot中每个软件包都必须有一个唯一的名称。VERSION #软件包的版本号。LICENSE #软件包使用的许可证类型(后面COPYING是文件)。SITE #软件包的下载地址。SOURCE #软件包的源文件名称。HASH #软件包源文件的校验和。DEPENDENCIES #软件包所依赖的其他软件包名称。TARGET_BINARY_DIR #构建软件包时目标系统的二进制文件目录。TARGET_LIBRARY_DIR #构建软件包时目标系统的库文件目录。MAKE_FLAGS #构建软件包时传递给 make 命令的额外参数。CONFIGURE_ARGS #配置软件包时传递给 configure 命令的额外参数。INSTALL_TARGET_PATH #构建软件包时目标系统的安装路径。BUILD_DIR #构建软件包时的临时目录。HOST_DIR #存放 Buildroot 工具链的目录。STAGING_DIR #存放 Buildroot 目标系统临时文件的目录。EFIVAR_BUILD_CMDS #以EFIVAR为例,放构建命令EFIVAR_INSTALL_TARGET_CMDS #以EFIVAR为例,放安装命令EFIVAR_MAKE_OPTS #以EFIVAR为例,也是传递给make的环境变量HOST_MAKE_ENV #make命令的环境变量HOST_CONFIGURE_OPTS #./configure选项HOST_CFLAGS #同CFLAGSTARGET_* #交叉编译器的那些工具$(@D) #生成软件包的目标文件所在目录
line

总结

buildroot是一个比较好用的工具,但是久了不用,也很容易忘记。清楚buildroot的一点基本架构也是有必要的。

阅读全文

Linux下opencv和opencv_contrib安装

2025/1/24

@文章首版


前言

我近段时间在Linux下安装了opencv和opencv_conntrib出现很多的问题,所以将问题分享给大家,同时自己以后忘记,也可以来看看


一、简单说下cmake和make?

cmake和make都是编译大型编译时使用,cmake运行时,需要CMakeLists.txt文件,make需要的是Makefile文件。cmake中的CMakeCache.txt文件在执行了cmake后会产生的信息文件(错误信息和成功的信息)。opencv的编译还会产生一个CMakeDownloadLog.txt文件。这个文件记录的是编译时所需文件下载地址。
如果还需要cmake里了解其它文件的作用,可以在自行搜索并了解他们,我也正在学习。

二、使用步骤

1.下载文件并解压

依赖包下载(其中如果出现问题,需要找到相应的源,加入进去,一般就可以解决。)

                
123
line
                
sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
line

cmake官网
opencv下载
opencv_contrib下载
opencv和opencv_contrib的压缩文件,我这里下载的zip压缩文件。

                
12
line
                
unzip opencv-4.5.0.zipunzip opencv_contrib-master.zip
line

解压数据之后可以先与github上的文件上简单的对比一下,有时候可能出现文件未下载完整。

                
1
line
                
mv opencv_contrib-master opencv-4.5.0
line

这里最好不使用cp,当然cp可能也没什么影响,但是cp在转移ln创建的链接文件时,复制的是文本文件,mv只是转移目录,所以保险起见用mv,也可以在opencv-4.5.0文件下解压。

创建build文件,并且进入:

                
12
line
                
cd opencv-4.5.0mkdir -p build && cd build #-p指令可以不报错,也就是build存在的情况下也可以执行&&后面的命令
line

build文件名和位置,还有opencv_contrib-master位置可能并非一定这样,有兴趣的可以试着更改下。

2.编译

opencv和opencv_contrib配置:

                
12
line
                
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules .. #/usr/local/路径是默认,可以不用添加相应的参数echo $? #不是必须,但可以检验一下上一个步骤。打印0是成功,其它是错误。
line

这里出现错误的情况一般是目录文件输入错误。如果出错,可以仔细检验一下。

cmake编译(这一步可以不用加入,我稳妥起见,就做了这一步):

                
1
line
                
cmake --build . #这里build虽然和前面同名,但前面试着创建其它目录的小伙伴,请不要更改它,--build是参数。后面的"."是目录,可以根据自己的情况更改
line

这里cmake出现的问题和后面make的问题是一样的
make编译:

                
12
line
                
sudo make #sudo 并非必须,这里只是为了防止出现一些权限问题。可以在后面加上-jn,这里n是指n个任务同时进行,一般设置为核心数+1速度最快,具体原因我也在学习中。sudo make install #这里大部分工作是刚才配置好的文件移到设置好的文件下。我这里是/usr/local/文件下,需要sudo权限,其它不需要权限的目录,可以不用加入sudo,但是需要配置环境变量。
line

make的过程中可能出现问题,我这里暂时出现的两个两个问题,第一个是下载问题,就需要查找前面cmake介绍的CMakeDownloadLog.txt文件,通过错误提示缺少的文件搜索一下,找到相应的下载地址手动下载下来,然后通过CMakeCache.txt文件里的错误提示,添加进去就行。大多数的错误是缺少boostdesc_bgm.i相关的文件。还有是缺少features2d/test/test_descriptors_invariance.impl.hpp 这样的一种文件。处理方法是借鉴的这个大佬的操作
我这里简单的说一下。

缺少boostdesc_bgm.i的小伙伴可以通过百度网盘boostdesc_bgm.i下载,提取码:9m1y

                
123
line
                
vim ../CMakeLists.txt #现在在build目录下执行的命令:set nu #为文件设置行数include_directories("modules") #在567行的位置,大概意思是为cmake增加头文件的搜索目录,但也有说这行数据并非那么严格,可以放在文件的前面一些就行,感兴趣的可以试一下。
line

如果一起正常,那么就没问题了。


总结

cmake和make非常重要,我这里有几个网址,可以推荐给大家学习cmake手册详解makefile文件详解

阅读全文

Windows10/11上WSL安装并连接USB的过程和问题整理

2025/1/24

@文章首版

前言

什么是WSL呢?引用官网“适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。”简单说就是开销小了,但需要满足的Linux的基本功能都有。wsl官网

一.Windows上的基本准备

1.使用Windows搜索功能搜索“启用或关闭Windows功能”

在这里插入图片描述
2.勾选以下选项

在这里插入图片描述
3.通过Microsoft Store软件下载Ubuntu版本或者使用Windows终端下载Ubuntu版本(这个方法比较慢) ,我这里使用的Ubuntu22.04。(这一步不是必须,但创建一个新的Ubuntu是必须的)

                
12
line
                
wsl --list --online @查看可以安装的发行版本wsl --install - @DistroName表示,上面打印发行版本名称
line

下面是展示的例子:
在这里插入图片描述

二.WSL的常用命令和存储转移

1.常用命令

                
12345
line
                
wsl --set-version @设置指定的发行版使用wsl1还是wsl2。DistributionName=发行版本名字,versionNumber=版本号1,2(目前仅2个版本)wsl --update @手动更新wsl的内核wsl -u @使用windows终端登陆指定的用户名(wsl内创建的用户名),wsl --shutdown @关闭所有wslwsl --unregister @取消注册的发行版本。这也是卸载wsl所关键的一步。DistributionName=同上
line

2.wsl的存储转移

                
123
line
                
wsl --export @导出wsl,DistributionName=同上,FileName=保存的文件(.tar后缀)wsl --unregister @取消注册的发行版本。DistributionName=同上wsl --import @导入wsl,InstallLocation=wsl保存的目录,其他名字同上
line

在这里插入图片描述

三.WSL的GUI功能

1.下面是对比Ubuntu22.04和Ubuntu18.04的gitk显示。这也是我为什么选择22.04版本的原因。这个可能是字体的粗细影响,应该也是可以调整,不过我想会挺麻烦,为了省事。直接安装22.04比较好用。至于其他的就不用展示了,gitk如果可以使用大家下载好相关的gui程序应该也可以使用。

2.正常来说安装成功就可以使用wsl的gui功能。但我这里例举一些可能出现问题。
(1)官网上要求的wsl内核版本,这个是需要的。一般使用wsl –update命令更新到最新就行。
(2) /tmp/.X11-unix连接文件出现问题,重新连接一个/mnt/wslg/.X11-unix 文件就可以。
(3)如果出现/mnt下没有wslg文件夹的情况下,更新windows的系统版本。将他更新到最新就行。(这不是一个常见的问题,但遇到后可能很难找到解决方案,我这里也当作记录下自己的解决方法。)

四.WSL连接USB

1.首先windows上安装usbip.exe程序。(这里需要使用wsl2版本)
(1)下载其中的msi文件,并安装: 开源usbip-win项目.
(2)如果有winget工具,windows终端上使用以下命令就行

                
1
line
                
winget install --interactive --exact dorssel.usbipd-win @使用Windows终端下载
line

2.接下来需要在usb上安装
方式(1)20.04及以下的版本使用以下命令:

                
12
line
                
sudo apt install linux-tools-5.4.0-77-generic hwdatasudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20
line

方式(2)22.04及以上(其实其他版本也是可以这样使用,只是目前还没尝试)

                
12
line
                
sudo apt install linux-tools-5.15.0-52-generic hwdata #因为22.04上面没有5.4.0-77版本,我选择了一个最高版本,也可以选择其他版本sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.15.0-52-generic/usbip 20 #5.15.0-52-generic这个名字需要和上面对应起来,这是一个目录,也可以通过补全的方式将他输入
line

3.连接一个usb设备:

                
1
line
                
usbipd wsl list @windows终端上使用这个命令查看有哪些usb设备
line

在这里插入图片描述
对比,然后使用命令(windows终端)

                
1
line
                
usbipd wsl attach --busid 1-1 @1-1是设备ID,根据上面的打印,换成自己添加的设备ID
line

wsl的终端上(需要先输入以上命令连接成功后,以后再连接就可以使用wsl上连接):

                
12
line
                
usbip list -r $HOSTNAME.local #查看已连接过的设备信息sudo usbip attach -r $HOSTNAME.local -b 1-1 #连接USB设备,然后替换自己的设备ID
line

在这里插入图片描述
断开usb,windows终端上输入以下命令

                
1
line
                
usbipd wsl detach --busid 1-1 @断开USB设备,替换成自己的ID
line

#######注意:如果没有加入这一行就拔出usb,可能会出现鼠标旁边不间断画圈(一直有usb设备以鼠标的形式在使用)。这时候使用前面提到的wsl –shutdown,关闭所有的wsl发行版即可恢复正常。

五.WSL设置默认启动用户

一般使用import导入的方式,启动wsl会默认是root用户。以下提供几种方式,设置默认启动的用户。
1.使用windows的命令,没有卸载wsl的发行版可用,卸载后只有看运气,版本是否一致。

                
1
line
                
config --default-user @DistributionName=同上,Username=自己wsl发行版的用户名字
line

2.更改/etc/wsl.conf文件,可以省去麻烦,以后都不用再改。

                
1
line
                
echo -e "[user]\ndefault=$Username" >> /etc/wsl.conf #Username=同上,然后重启wsl就行了
line

3.更改注册表。
(1)使用win+r,输入regedit,打开注册表。
在这里插入图片描述

(2)打开下面注册表的路径

                
1
line
                
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss //注意这不是命令,是注册表路径
line

(3)找到下面的DefaultUid,更改为10进制的1000,然后重新启动wsl就可以了。0是root用户,1000一般是自己创建的用户。

                
1
line
                
cat /etc/passwd #可以查看自己的用户ID是多少,根据自己的用户名对应的ID更改
line

在这里插入图片描述
(4)展示添加一个csdn的账户名,并默认启动这个账户
在这里插入图片描述

#######注意:前面所提到的windows终端大多需要管理员方式打开,最好都使用管理员方式打开。如果不好分辨哪个是windows上的命令和Linux上的命令。可以根据我后面添加的注释命令,@表示windows终端的注释,#表示Linux上的注释。

阅读全文

如何快速搭建一个满意的个人博客

2025/1/24

如何快速搭建一个满意的个人博客


@文章首版


前言

搭建一个满意的个人博客,即满意又省心,没有最快只有更快!!!


一、安装nginx

1.安装nginx所可能需要的依赖

命令如下(示例):

                
1
line
                
yum install gcc zlib zlib-devel pcre-devel openssl openssl-devel
line

2.打开nginx官网下载地址,选择自己需要安装的版本,下面以1.23.3版本为例

命令如下(示例):

                
123456
line
                
wget http://nginx.org/download/nginx-1.23.3.tar.gztar -xvf nginx-1.23.3.tar.gzcd nginx-1.23.3 && ./configure --with-http_stub_status_module --with-http_ssl_modulemake sudo make install #如果不是root用户下,需要加sudosudo /usr/local/nginx/sbin/nginx #输入这个命令验证一下就可以了
line

nginx安装成功

二、安装hexo

命令如下(示例):

                
123
line
                
sudo npm install -g hexo-climkdir hexo && cd hexo #根据自己需要单独创建个目录,用于存放hexohexo init #执行这一步需要有git命令
line

执行结束后有如下生成文件即表示成功。
在这里插入图片描述

三、hexo放入nginx中

1.hexo生成网页

命令如下(示例):

                
1
line
                
hexo g #在hexo目录下执行,命令意思是生成hexo主题
line

如果不是下图这样生成成功的标识,那么先检查自己是否有修改,如果有请先解决或清理自己的修改。
hexo生成OK

2.nginx代理hexo

命令如下(示例):

                
12
line
                
sudo mv /usr/local/nginx/html /usr/local/nginx/html_back #备份一下原始的sudo cp public /usr/local/nginx/html -rf #此时在hexo目录下
line

最后再打开刚才的网址,查看网页已经有变化
nginx展示成功

3.更换自己想要的个人博客样子

首先进入hexo官网,可以看到目前就有376种供你选择,以后我想会更多
hexo官网
下面我选择一个比较经典的NexT为例,点进入后是一个github仓库
在这里插入图片描述
下载这个hexo主题并使用

命令如下(示例):

                
123456
line
                
git clone https://github.com/next-theme/hexo-theme-next.git themes/next #现在在hexo目录下sed -i 's/theme: landscape/theme: next/' _config.yml #这里是将theme: 对应的参数landscape换成了next(也就是next主题的目录名)hexo clean #清理生成的hexo主题hexo g #生成hexo主题sudo rm -rf /usr/local/nginx/html #先删除以前生成的hexo主题sudo cp public /usr/local/nginx/html -rf #最后将生成的主题替换进去,public就是生成的主题
line

在这里插入图片描述
最后主题就更换成功了,这里只是简单举一个例子,可能这个主题一般当然还有更好看,更拉风的!!!

四、添加或修改自己的文章

这一步我想也是搭建比较关心的,可以在csdn创作中心先写一篇,或者用其他markdown格式写一篇文章,下面以csdn上的为例

命令如下(示例):

                
12
line
                
touch source/_posts/个人博客搭建.md #目前在hexo目录下,创建一个md文件,文件名字由你自己命名即可vim source/_posts/个人博客搭建.md #将下图中左边部分全部复制后粘贴进去。注意:按a或i后再粘贴
line

在这里插入图片描述
最后再将生成的hexo主题在nginx里更换。如上3.3的拷贝方法即可,添加成功。
在这里插入图片描述


总结

以上就是快速搭建一个满意的个人博客的方法,因为是使用的nginx代理,还可以添加https访问以及http跳转https等。虽然文章比较长,但主要还是图多,实际操作并没有多少。这样搭建的博客,不会影响你分享文章,而且还有不少好看的主题可以更换,因为由nginx代理所以性能这些也是可以放心的。

阅读全文
1
avatar
John Doe

Description