自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(176)
  • 资源 (3)
  • 收藏
  • 关注

原创 9-家长控制-儿童上网

家长控制或者儿童上网,说的都是可以指定某个设备可以在某个时间段允许上网,或者某个时间断不允许上网。

2023-07-20 17:05:15 547

原创 31-Openwrt 内核版本替换

有些时候因为一些解不了的bug,在新的内核版本里面已经解决了,这时候我们会想着升级下内核版本,而不是把整个openwrt升级。

2023-05-30 09:44:05 4494

原创 30-Openwrt config save and restore

在使用sysupgrade升级的时候,默认需要把配置文件进行备份,升级完成后进行恢复。如果是-n则把配置文件删除,恢复默认配置。

2023-05-24 10:36:18 830

原创 29-Openwrt 防攻击

DOS攻击很常见,路由器可以通过iptables做一些简单的攻击防护,这边主要介绍模拟攻击的工具和防护攻击的手段。

2023-05-18 11:29:25 1382

原创 28-Openwrt 固件签名与验签

openwrt使用sysupgrade升级的时候,只会对固件的头部image进行校验是否合法,不会校验固件的完整性,所以当固件只有头部正常其他地方被破坏修改后,这个固件就是危险的,一旦升级就会出现变砖的情况。为了验证固件的完整性和合法性,可以有两种方式进行保护。

2023-05-09 11:43:40 889

原创 5-Linux 内存溢出oom

Linux内核为了提高内存的使用效率采用过度分配内存(over-commit memory)的办法,造成物理内存过度紧张进而触发OOM机制来杀死一些进程回收内存。该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽会把该进程杀掉。

2023-04-02 16:44:52 3051

原创 1-Linux 保存kernel panic信息到flash

Linux 保存kernel panic信息到flash

2023-02-23 14:43:35 1561

原创 2023新的征程

距离上一篇的五年睿进已经过了四年,不知出于什么理由,中间的这三年没有写年终总结,今年也是比较特殊的一年,重新开始自己的年终总结,回顾四年里发生的事情,计划2023新的征程。

2023-01-11 21:04:59 581

原创 27-Openwrt rtc htpdate system

rtc htpdate

2022-11-05 16:32:30 1165

原创 26-Openwrt 端口转发 dmz upnp

端口转发 dmz upnp

2022-06-14 17:42:55 4528

原创 25-Openwrt 访客网络添加

主人网络和访客网络相互隔离

2022-06-14 17:41:15 1400

原创 24-Openwrt dnsmasq

dnsmasq是openwrt一个重要的进程,里面提供了两个重要的功能。一个是dhcp server,给lan口使用的,另一个是dns功能,维护路由器的dns信息,而且支持ipv4和ipv6。1、 dnsmasq启动过程从/etc/init.d/dnsmasq start脚本启动root@Openwrt:/# cat /etc/config/dhcpconfig dnsmasq option domainneeded '1' option boguspriv '.

2022-05-28 16:33:20 4061

原创 23-Openwrt switch vlan配置

2022-05-28 10:13:25 7171 4

原创 22-Openwrt 使用外部kernel和kernel_config

由于内核的修改要通过打patch的方式会比较麻烦,有时候我们会把内核直接解压出来用修改源码的方式,这时候就需要使用外部kernel的这个选项。openwrt的内核config是根据版本保存的,如config-4.19,当我们在一个版本下如果有很多和硬件平台的时候,平台config的分类保存就很重要了,这时候我们会选择使用外部kernel_config的方式。1、使用外部kernel使用外部内核源码的方式,我们一遍会编译一遍openwrt,然后将build_dir/target-aarch64_cor.

2022-05-18 18:07:01 3009

原创 21-Openwrt 内核模块改成.ko自动加载

openwrt下有很多开源的内核模块位于package/kernel/下,如gpio-button-hotplug、mwlwifi等。这些模块都是文件系统启动后,通过autoload的方式进行insmod载入的。1、正常思路在《Openwrt add function module to package》章节里面有介绍,如何添加一个内核模块。上面介绍的是自己添加一个内核应用模块,然后编译成.ko自动载入。如果是内核里面已经有的模块代码,如何将其改成.ko的方式自动载入。调试过程遇到过一个问题,内.

2022-05-18 18:04:19 1366

原创 20-Openwrt crond crontab

crond和corntab都是busybox下的一个工具,crond是一个后台进程,每隔一分钟读取配置文件中的参数,执行对应的动作。crontab是提供的一个命令行,可以对配置文件进行增删改查。这个定时功能对于平常一些功能使用很方便,比如每天晚上12点重启路由器等。1、openwrt上启动crond进程crond的启动参数如下:一般就设置-c指定文件目录,-l日志等级# crond -hcrond: invalid option -- hBusyBox v1.22.1 (2022-03-.

2022-05-14 17:45:10 1078

原创 19-Openwrt双固件升级

在上一章节《Openwrt sysupgrade系统升级》中,我们描述了sysupgrade升级系统的过程,这种升级过程会直接firmware分区进行写入,无法保证系统的安全性,只要在写入过程突然断电就会出现系统写入失败,升级失败无法启动系统的问题。为了解决该问题一般会使用双固件升级的方式,有一个主分区firmware和一个备份分区firmware_backup,常见的有双固件升级方式有很多种,这边只介绍一种通用方式1.升级流程1.根据sysupgrade的过程,将固件进行校验写入,不过写入的时.

2022-05-04 15:04:16 3764

原创 18-Openwrt sysupgrade系统升级

openwrt的升级是使用sysupgrade工具来升级的,该工具为sbin下面的一个脚本,可以附带很多参数,但是我们一般就直接sysupgrade openwrt-ramips-mt7621-device-squashfs-sysupgrade.bin升级参数说明-i开启交互模式-d重启前延迟,延迟秒数是传进来的-v会打印sysupgrade脚本中的一些信息,脚本中默认打印-q与-v相反-n升级后不保存配置,默认保存配置-c保存所有的改.

2022-05-04 15:03:24 5970 2

原创 17-Openwrt banner文件生成

在每次串口或ssh登录后台的时候,一按回车键就会出现openwrt的字段,如果想换成自己自定义的内容如何实现。banner:语牌和横幅这个文件存放在如下位置:./package/base-files/files/etc/banner,所以我们只需要修改这个文字的内容就可以。那我们如何生成上面好看的内容,可以使用如下工具生成:sudo apt-get install sysvbanner toilet figletubuntu:~/$ banner openwrt #### #####.

2022-01-21 11:05:22 1304

原创 16-Openwrt patch生成

在开源模块的基础上修改代码,更多的时候是通过打补丁的方式进行修改。1.内核patch生成1.1 编译内核模块命令vim 19.07/target/linux/Makefileprereq clean download prepare compile install menuconfig nconfig oldconfig update refresh: FORCE @+$(NO_TRACE_MAKE) -C $(BOARD) $@清空内核:make target/linux/cle.

2022-01-21 10:50:35 1118

原创 远程调试frp

嵌入式设备上线之后,如果遇到问题想要线上维护,最直接的方法的能够远程ssh进入到设备里,然后查看日志定位问题,这边介绍使用frp配合mqtt的方式进行设备远程调试。1.远程调试原理远程调试的原理如下:本地网关与MQTT服务器保持长连接,用来接收开启远程/关闭远程命令fprs服务器需要有公网IP,开发人员可以通过该公网IP和指定的端口远程开发人员通过约定好的MQTT消息,发送开启远程命令给本地网关。本地网关收到开启远程的命令后,就启动frpc去连接对应的frps服务器。本地网关frpc连接f.

2021-09-23 11:48:16 681

原创 5-Openwrt ipv6 6to4

当电信宽带不下发ipv6地址,但是我们又有ipv4的公网地址的时候,就可以使用公网ipv4地址生成一个唯一的ipv6地址,使得一个ipv6数据包可以在ipv4的网络中传输时,这就是ipv6的6to4协议.1、6to4原理路由器A及B分别是两个站点(站点A与站点B的出口路由器,并且都是IPv4及IPv6双栈路由器)。两边都申请到一个IPv4公网地址,使用这个公网IPv4地址进行映射得到全球唯一的6to4 IPv6地址,这个IPv6地址 /48位,空间非常大,用于相应站点内的IPv6用户。如此一来.

2021-08-28 10:11:27 1398

原创 4-Openwrt ipv6之NAT6

在实际使用过程有时候电信宽带可以下发给Wan口使用的ipv6地址,但是不下发给lan口使用的ipv6地址前缀。这时候可以使用NAT6的方式,跟ipv4的NAT一样,有自己的内网地址,访问外部的时候经过NAT转化。ipv6也使用内网地址,根据ipv6的规则FD::/8开始的地址为内网地址。IPv6的NAT关键在于设置br-lan端口的ipv6的网段/前缀设置ip6tables规则,将br-lan网段的数据包通过snat地址转换后发出1. nat6配置开启config配置CONFIG.

2021-08-28 10:09:27 2435

原创 0-Linux coredump捕获分析

1.制作debug-rootcommit a4a3b5ba5a7bdb3fb98028793d62f37788c0790aconfig: CONFIG_DEBUG use debug rootfs, sstrip real rootfs9ad4d66b7aa27f7ee42281466662d51044001278 debug: add debug-root for debug coredump and panicVIM 系统编译加上-g3,在strip之前,将这些文文件存放到debug-r

2021-07-16 09:36:58 693

原创 4-Linux 内存泄漏工具

1、mtrace应用环境:Linux GLIBC编程语言:C使用方法: 包含头文件mcheck.h,定义环境变量MALLOC_TRACE为输出文件名,程序开始时调用mtrace()即可。结果输出:用户指定的文件设计思路: 为malloc,realloc,free函数添加钩子函数,记录每一对malloc-free的执行优缺点:只能检查使用malloc/realloc/free造成的的内存泄露如何获取:GLIBC自带,可直接使用2、memwatch应用环境:Linux编程语言:C使用方法:

2020-11-13 15:32:09 444

原创 3-Linux 进程中的某个线程占用时间

在比较大型的项目中,通常都会使用多线程技术,而且通常是多人合作开发,各方自测OK之后,整合在一起往往会出现一些问题,CPU使用率过高就是其中之一。如何在不熟悉所有模块代码的情况下,快速的定位到具体哪一个线程在消耗CPU,显得很有必要。在X86上,可以借助一些工具进行定位分析,但是在嵌入式系统中,工具就比较匮乏,各命令功能也比较简单,就不好定位。现介绍一种简单通用的办法:1.获取各个线程的tidps查看进程root@zihome:/proc/2111# ps | grep ZGateway 21.

2020-11-13 15:31:28 1196 1

原创 2-Linux 进程内存

ps查看进程root@zihome:/proc/2111# ps | grep ZGateway 2111 root 76112 S {MainThread} /zihome/plugins/zgateway/ZGateway /dev/ttyS2 /dev/ttyS1 2114 root 1520 S {ZGatewayTimerCh} /bin/sh /zihome/plugins/zgateway/ZGatewayTimerCheck.sh /zihome/plug

2020-11-13 15:29:00 311

原创 1-Linux 系统总内存

1.内存使用情况我们一般会使用free命令来查看系统的内存使用情况,如下root@zihome:# free total used free shared buffersMem: 125848 57332 68516 0 3160-/+ buffers: 54172 71676Swap:

2020-11-13 15:26:39 491

原创 14-Linux gpio模拟spi

1.config配置首先是spidev,要在/dev/下面产生设备文件,需要spidev的支持CONFIG_SPI_SPIDEV=y使用的是gpio模拟spi,gpio模拟spi的时序原理是bitbang文件实现的,所以这个也需要打开,如果是在openwrt下动态加载的话就是如下两个配置CONFIG_PACKAGE_kmod-spi-bitbang=y+CONFIG_PACKAGE_kmod-spi-gpio=y如果是直接内核的话是如下两个CONFIG_SPI_BITBANG=yCONF

2020-11-12 11:34:57 1862 1

原创 13-Linux-gpio-system

对于gpio的应用其实会在很多地方,最常用的就是led和key,我们也可以使用类似单片机的写法,去直接读写寄存器来控制,没有文件的体现,但这样总感觉不够Linux,所以我们还是要使用linux已有的一些设备节点来实现。一 概述Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,.

2020-11-12 11:34:04 334

原创 12-Linux mmc system

Linux mmc systemMMC、SD、SDIO的技术本质是一样的(使用相同的总线规范,等等),都是从MMC规范演化而来;MMC强调的是多媒体存储(MM,MultiMedia),SD强调的是安全和数据保护(S,Secure);SDIO是从SD演化出来的,强调的是接口(IO,Input/Output),不再关注另一端的具体形态(可以是WIFI设备、Bluetooth设备、GPS等等)。先查看下MMC的驱动框架,如下:在Linux中MMC/SD卡的记忆体都当作块设备。MMC/SD设备驱动

2020-11-12 11:33:12 325

原创 11-Linux usb system(driver)

Linux usb system(driver)USB的应用用来用广泛了,键盘、鼠标、打印机、摄像头、网卡…而且传输的速度也越来越快,USB2.0的480MB/s,到USB3.0已经是USB2.0的十倍了。Linux中USB的内容实在是太多了,有兴趣的可以查看《Linux那些事兒之我是USB》这本书,这边对USB的驱动进行简要的说明和总结。还是先看一下框架图,如下:由图可知USB驱动的各个层次:USB主机控制器,位于/drivers/usb/host/下面,USB主机控制器接口标准有OHCI

2020-11-12 11:32:39 359

原创 11-Linux usb system(descriptor)

Linux usb system(descriptor)为了更好地描述USB设备的特征,USB提出了设备架构的概念。从这个角度来看,可以认为USB设备是由一些配置、接口和端点组成,即一个USB设备可以含有一个或多个配置,在每个配置中可含有一个或多个接口,在每个接口中可含有若干个端点。这个步骤一般是在设备接入主机时设备进行枚举时完成的这些单元之间的关系如下:解释说明:USB设备可以看作提供了多个串口的设备,依据USB的规范,我们将每个串口称作端点(Endpoint),要和这个端点通信,我们就要

2020-11-12 11:32:05 500 1

原创 10-Linux nand system

Linux nand system现在很多嵌入式设备都使用nand flash,特别是一些需要大容量的存储介质时,nand flash的高性价比是别的存储介质不能代替的,下面就行nand系统的简要分析,并将nand flash独有的ECC和OOB进行说明。注:有兴趣的可以先查看如何编写Linux下Nand Flash驱动这篇文章,里面对部分内容分析的很透彻。nand flash的驱动不同于i2c/spi这类总线类驱动,nand与cpu直接的传输是通过IO来进行的,所以nand的驱动只有控制器驱动,

2020-11-12 11:30:42 282

原创 9-Linux phy system

Linux phy systemPHY芯片为OSI的最底层-物理层(Physical Layer),通过MII与数据链路层的MAC芯片相连,对于MAC与PHY之间的一些知识可以查看Mac与Phy组成原理的简单分析,这篇文章进行熟悉。PHY与MAC整体的连接框架:PHY的硬件系统算是比较复杂的,PHY与MAC相连,MAC与CPU相通,PHY与MAC通过MII和MDIO/MDC相连,MII是走网络数据的,MDIO/MDC是用来与PHY的寄存器通讯的,对PHY进行配置。类似的SWITCH芯片一般也有两

2020-11-12 11:29:11 545

原创 3-Openwrt ipv6之-odhcpd服务器

openwrt上面的dhcpv6服务器package一般使用odhcpd,里面即包含了有状态的dhcpv6服务器,也包含了无状态的ra服务器。1.odhcpd服务器启动过程开启config配置CONFIG_PACKAGE_odhcpd=yCONFIG_PACKAGE_odhcpd_ext_prefix_class=0CONFIG_PACKAGE_odhcpd_ext_cer_id=0etc/init.d/odhcpd会启动服务器进程#!/bin/sh /etc/rc.commonS.

2020-07-08 09:04:36 6001

原创 5-Openwrt MQTT client使用

mosquitto已经集成了命令行mosquitto_sub和mosquitto_pub,这个一般就是调试的时候使用,后面还是要使用mosquitto提供的库函数实现C语言代码层的客户端。1. 添加client在mosquitto里面有个client目录,里面就是使用libmosquitto实现的客户端程序,封装成mosquitto_sub和mosquitto_pub命令行。所以新建一个跟client同一级,自己的client,添加对应的文件tree myclient/myclient/├─.

2020-07-07 13:45:54 970

原创 4-Openwrt MQTT broker使用

mosquitto算是MQTT在linux平台应用比较广泛的开源软件,包含了服务端broker,也提供了lib库给client使用。1.mosquitto下载编译到官网下载需要的版本:http://mosquitto.org/files/source/在openwrt下面添加mosquitto packagefiles下面放启动脚本和conf配置文件,Makefile里面编译信息,src下面就是官网下载的mosquitto源码mosquitto/├── files│  .

2020-07-06 16:48:58 881

原创 3-MQTT协议分析

MQTT的协议有必要的话也是可以抓包看一下其交互过程,加深理解其原理1. 报文固定报文格式:类型+标志位Bit7 - 43 - 0byte 1MQTT控制报文的类型用于指定控制报文类型的标志位byte 2…剩余长度1.1 MQTT控制报文的类型:报文类型字段值数据方向描述保留0禁用保留CONNECT1Client —> Server客户端连接到服务器CONNACK2Server —> Cli.

2020-07-06 09:09:31 2143

原创 2-MQTT ubuntu window下测试

在学习MQTT的代码之前,先使用ubuntu实际测试一遍,加深其使用场景和过程。mosquitto是一个开源的轻量级的C实现,完全兼容了MQTT 3.1和MQTT 3.1.1,在嵌入式系统上比较常用,这边介绍ubuntu上的安装使用,后面openwrt上也是使用mosquitto。1. ubuntu上面安装mqtt引入mosquitto仓库并更新$sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa$sudo apt-get upd.

2020-07-02 09:57:17 400

MT2503手册

MT2503 datasheet。。。。。。。。。。。。。。。。。。。。。。。。

2018-04-13

MT6261芯片手册

MT6261芯片手册 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2018-04-13

Qt从零开始制作串口调试助手源代码(V1.0)-Creator_Ly

Qt从零开始制作串口调试助手源代码(V1.0)-Creator_Ly

2016-01-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除