15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

作者标题

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait.

Author Archive by stormwind

【Linux】Linux下将power button的动作设置为shutdown操作

一、带桌面系统

在图形化界面中,可以直接在settings -> Power 下进行设定

二、无桌面系统

Ubuntu默认会运行acpid服务,因此可以按照下面描述的方法来进行设置。具体来说,你可以在Ubuntu命令行界面下执行以下步骤:

1、打开acpid服务的配置文件/etc/acpi/events/powerbtn,如果该文件不存在,可以先创建一个:

sudo touch /etc/acpi/events/powerbtn

2、编辑该文件,在其中添加以下内容:

vim /etc/acpi/events/powerbtn

添加内容:

event=button/power
action=/sbin/poweroff

其中,event表示事件类型,这里指的是按下power按钮;action表示要执行的动作,这里指的是关机操作。

3、重启acpid服务,让修改生效:

sudo systemctl restart acpid

现在,当你按下power按钮时,Ubuntu系统就会自动执行关机操作。

【buildroot】增加local.mk编译自定义kernel,uboot

1.make menuconfig

添加local选择local.mk文件

前提:已经打开linux 和 uboot 编译,但是寻找资源文件夹的时候优先找local.mk

添加内核编译:
注意:添加deconfigs的时候,文件名字最后的_defconfig去掉

Kernel->Linux Kernel 并且在linux目录下arch/arm/configs将自己的配置文件名字添加到下方

Bootloaders->U-Boot

错误信息:是因为没有添加配置文件 配置文件是在uboot文件夹下configs

boot/uboot/uboot.mk:416: *** No board defconfig name specified, check your BR2_TARGET_UBOOT_BOARD_DEFCONFIG setting. Stop.
Makefile:84: recipe for target ‘_all’ failed
make: *** [_all] Error 2

BR2_TARGET_UBOOT_BOARD_DEFCONFIG

2.buildroot目录下创建local.mk文件

local.mk文件内容添加编译文件夹路径

其中宏BASE_DIR是buildroot/output 输出的目录,

    添加uboot文件夹:

    UBOOT_OVERRIDE_SRCDIR =

    添加linux文件夹

    LINUX_OVERRIDE_SRCDIR=

    添加busybox文件夹:

    BUSYBOX_OVERRIDE_SRCDIR  =

【uboot】去掉启动logo显示

一、确定logo存放位置

这里面都是各种芯片厂家的logo图片,如果想显示logo,最简单的方案就是同名替换。

二、确定logo显示函数

既然我们知道了logo存放位置,那是否可以直接删除可以不,答案是可以的,但是比较麻烦,因为代码设计的不完善性导致模块化失调,没法直接关闭logo文件检测的逻辑。需要修改地方比较多。退而求其次,干脆干掉显示函数。

三、去掉版本显示信息

去掉logo后,你会发现还有一行小的字,那就是版本显示信息,同样的方案干掉函数。可以直接顶一个宏定义CONFIG_HIDE_LOGO_VERSION

【Linux】定时网络限速

一、安装依赖软件

sudo apt-get install wondershaper
sudo modprobe sch_netem

二、功能配置

00 18   * * *   root    wondershaper clear eth0
00 1    * * *   root    wondershaper eth0 10000 5000
00 10   * * *   root    wondershaper clear eth0
00 14   * * *   root    wondershaper eth0 10000 5000

#限制eth0网卡下载速度10000K,上传速度5000K

sudo wondershaper 网卡名字 10000 5000

#清除eth0网卡的网速限制

sudo wondershaper clear 网卡名字

三、定时启动

# 查看服务状态
sudo  service cron status
# 开启服务
sudo service cron start
# 停止服务
sudo service cron stop
# 重启服务
sudo service cron restart

1、例子

# 如果服务没有开启,开启该服务
sudo service cron restart
# 输入该命令,修改crontab配置。第一次输入该命令时,会提示选择编辑工具,一般选择vim(vi)即可。
crontab –e
# 在上一步打开的终端中(第一次使用该命令的话,在选择编辑工具后),输入下面的内容
# 该内容表示,在每天的0点0分,执行脚本MakeProject.sh
0 0 * * * /home/linduo/Project/MakeProject.sh
 
Crontab定时任务命令格式
 
# 格式如下
# minute hour day-of-month month-of-year day-of-week commands
# 00-59 00-23 01-31 01-12 0-6 (0 is sunday) 
 
# 每天0点0分,执行指定脚本
0 0 * * * /home/linduo/Project/MakeProject.sh
 
# 星期1到星期5,11点30分,执行指定脚本
30 11 * * 1,2,3,4,5 /home/linduo/Project/MakeProject.sh
 
# 星期1、星期3、星期5,23点00,执行指定脚本,并将内容重定向到文件(使用日期命名)
# 获取日期命令,必须使用如下格式,否则会导致cron执行失败。
00 23 * * 1,3,5 /home/linduo/Project/MakeProject.sh all >> "/home/linduo/Project/Build_$(date +"\%Y-\%m-\%d")".log 2>&1

2、格式

 crontab 任务配置基本格式:*  *  *  *  command

第1列表示分钟0~59 每分钟用*或者 */1表示
第2列表示小时0~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0,7都可表示星期天)
第6列要运行的命令

3、添加新指令

crontab -e
00 18   * * *   root    wondershaper clear eth0
00 1    * * *   root    wondershaper eth0 10000 5000
00 10   * * *   root    wondershaper clear eth0
00 14   * * *   root    wondershaper eth0 10000 5000

【光猫】中兴F607ZA查看超级管理员密码【光猫】

Telnet连接光猫,用户名root,密码Zte521,输入命令sendcmd 1 DB p DevAuthInfo即可查看所有的用户名密码,但是中兴F607ZA比较奇葩,普通用户和超级管理员登录的页面是不同的,超级管理员的登录页面是:

http://192.168.1.1/cu.html

移远4G Cat1 Open模块编译环境搭建

声明:此过程个人学习而已,非商业使用用途,试验成功了。请自行删除。

一、安装DS 5.26 软件安装。

  1. 下载DS500-BN-00022-r5p0-26rel0.zip 文件

链接:https://pan.baidu.com/s/1MKkdFj8j7HdbrqX7Q9W45w

提取码:1234

2、默认安装下一步

双击setup.exe文件进行自动化安装,根据提示一步一步直到完成。

一切提示都选择同意。

二、破解

1.拷贝破解文件到安装目录,我选择的全部是默认的。所以直接拷贝到“C:\Program Files\DS-5 v5.26.0”

2、管理员运行cmd窗口

进入DS5.26的安装目录下:

3.首先进行破解,指令如下:patcher.exe -a

看见上图,恭喜你成功破解了!

4.产生我们最终需要的目的license.dat文件,命令:patcher.exe –license

以上已经生成了我们需要的armcc 和license.dat 文件,剩下的就拷贝了!

三、拷贝license.dat文件到sdk相应位置

1、进入sdk目录,备份ARM_Compiler_5为bkARM_Compiler_5

2、拷贝DS 5.26安装目录下的ARMCompiler5.06u4 到上面的文件夹

3、修改“ARMCompiler5.06u4”改为“ARM_Compiler_5”

4、拷贝license.dat到sdk目录

四、测试是否成功

cmd窗口输入指令:build.bat kernel

祝你成功!

【YOLO11】yolov11基本环境安装

1、安装anaconda

进入官网:https://www.anaconda.com/download/success

下载后一路默认安装就可以

安装完以后,创建yolov11环境:

conda create -n yolov11 python=3.12

激活环境:

conda activate yolov11

2、安装GPU环境

Intel GPU ENV:https://anaconda.org/conda-forge/libopenvino-intel-gpu-plugin

To install this package run one of the following:
conda install conda-forge::libopenvino-intel-gpu-plugin
conda install conda-forge/label/openvino_dev::libopenvino-intel-gpu-plugin

管理员权限打开

NVIDA GPU ENV:

安装cuda及cudnn

3、安装Pytorch

进入pytorh官网:https://pytorch.org/get-started/locally/

选择版本:

4、安装ultralytics库

pip install ultralytics

5、更换源库

conda config –remove-key channels

conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

conda config –set show_channel_urls yes

pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple

【Linux】调度策略和优先级

一、背景

在Linux中,线程是一种轻量级的执行单元,可以在进程内独立运行。线程可以分为普通线程和实时线程,它们之间的区别在于其调度和优先级设置。

  SCHED_OTHER,普通的调度(非实时线程),应用层设置优先级0,调度器总会给此类线程分配一定的CPU资源,只不过是被分配到的频次和时间片长度较少。每1s中实时线程和普通线程的时间比例是95 :5。

  普通线程没有固定的响应时间要求,它们的优先级由系统动态调整。Linux使用CFS调度器来管理普通线程。CFS调度器采用一种称为红黑树的数据结构来维护线程的优先级。每个线程都有一个vruntime值,它表示线程在运行队列中消耗的虚拟时间。CFS调度器会根据线程的vruntime值来确定运行的顺序。优先级较高的线程vruntime值较小,因此能够更早地获得CPU的时间片。

  适用场景:实时性要求不高,但要求必须能被执行的线程。

  SCHED_FIFO,抢占式调度(实时线程),实时先行,应用层设置优先级1-99,同一优先级的多个线程中,一旦某个抢占式线程获取CPU,除非被更高优先级线程抢占(比如在非实时线程中创建一个更高优先级的实时线程),或该线程主动让出CPU资源,否则该线程将会一直占用CPU(但总会分配一点资源给SCHED_OTHER非实时线程)。

  适用场景:实时性要求高,不希望被频繁打断的任务。

  SCHED_RR,轮询式调度(实时线程),实时循环,设置优先级1-99,以循环方式运行,每个线程都有一个时间片来执行任务,时间片耗尽后,该线程将被放入队列的末尾,而较低优先级的线程有机会执行。

  适用场景:实时性要求高,允许被频繁打断的任务。

  在Linux中,可以使用sched_setscheduler函数。这个函数允许我们选择普通线程或实时线程。对于普通线程,可以使用nice函数来动态调整优先级。对于实时线程,可以使用sched_setscheduler函数来设置其类型和优先级。

  关于优先级高低和数值大小的关系,在应用层和内核中二者是相反的。

  设置线程的优先级需要谨慎,因为过高的优先级可能会导致系统资源的过度占用,从而影响其他线程和进程的正常运行。另外,需要注意的是,只有具有足够权限的用户才能设置较高的实时线程优先级。

  总结起来,Linux中的线程分为普通线程和实时线程。普通线程的优先级由系统动态调整,而实时线程的优先级由用户显式设置。通过合理地设置线程的优先级,可以提高系统的性能和响应时间。然而,设置线程的优先级需要慎重考虑,以避免影响其他线程和进程的正常运行。

二、方法

    pthread_t pis_task;
    pthread_attr_t attr;
    struct sched_param sched_param;
// 初始化线程属性
    pthread_attr_init(&attr);

    // 设置线程为实时线程
    pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
    pthread_attr_setschedpolicy(&attr, SCHED_FIFO);

    // 设置线程优先级
    sched_param.sched_priority = THREAD_PRIORITY;
    pthread_attr_setschedparam(&attr, &sched_param);

    pthread_create(&pis_task, &attr, PrtMgr_Decode_Task, (void *)&PrintMgr_Init_colorId);
    pthread_setname_np(pis_task, "name");