STM32实验及笔记 —— 🖥️(001)异机备份低功耗自用Git服务器搭建
»
(001)HAL库LED点灯
(002)HAL库LCD帧动画
(003)HAL库FFT动态频谱
(004)HAL库FFT Speed Up
(005)HAL库认识DMA
(006)看门狗总结
(007)GPIO使用步骤
(008)CubeIDE实现USB外设*
(009)为什么C99
(010)Linux UDP广播注意事项
(011)Linux非阻塞TCP
(012)ARM架构防烧脚本
(013)OpenWrt交叉编译
(014)C99基本数据类型
(015)C99 结构体
(016)C99 枚举
(017)C99 的函数及左值右值
(018)C99 的指针*
(019)C99 只有值赋值,没有move*
(020)C99 数组及结构体中的数组存储空间
(021)C99标准函数库没有函数模板
(022)POSIX线程库pthread的同步锁*
(023)POSIX线程库pthread的多线程*
(024)C99的条件语句
(025)C99的选择语句
(026)C99的循环语句
(027)C99标准库中的计时与等待 *
(028)C语言中的高精度计算库GMP *
(029)C语言中的Web服务*
(030)C语言中的字符转码ICU*
(031)从几个方面显然C语言比C++效率高*
(032)C99中的弱函数weak
(033)MTU TCP SOCKET
(034)STM32 UART连续发送数据函数
(035)STM32 UART连续接收数据函数
(036)STM32重定向printf输出到USART的方法
(037)STM32 Normal与Circle
(038)STM32 UART传输错误标志位的清除
(039)STM32 UART传输空闲中断
(040)STM32 串口、RS232是单根线发数据
(041)STM32 RS485差分信号通信
(042)STM32 等待DMA传输完成指定的字节数
(043)STM32进入低功耗模式
(044)DMA传输完成中断需要清空TCx标志位
(045)STM32软件函数命名规范
(046)在单字节完成中断中处理Idle
(047)C99内置宏
(048)使能中断后中断服务程序才起作用
(049)STM32程序启动过程
(050)STM32热加载新的程序固件
(051)中断向量表的指定
(052)STM32程序内的地址空间
(053)STM32修改主程序存放的地方
(054)Bootloader参考
(055)Keil中的下载算法
(056)编译器优化出错点
🍓(001)关闭交换分区
🍓(002)格式化U盘为ext4并设定块大小为1k
🍓(003)获取linux版本信息及硬件架构信息
🍓(004)最新版Ubuntu加速
🍓(005)不稳定网络克隆360浏览器内核脚本
🍓(006)Ubuntu24.04无法运行firefox注意事项
🍓(007)MAC地址
🍓(008)RMII和PHY
🍓(009)Ubuntu Server防火墙配置
🍓(010)Linux主动让出CPU
🍓(011)Linux硬件概念
🍓(012)Linux系统中的进程间通信
🍓(013)Git禁止强制推送
🍓(014)Git禁止reset --hard
🍓(015)将未写入的缓存立即写入硬盘
🍓(016)拷贝pre-receive到每个git仓库的脚本
🍓(017)sshd密码输入错误禁用IP3分钟
🖥️(001)异机备份低功耗自用Git服务器搭建
🖥️(002)OpenWRT配置注意事项
🕹️(001)while(1){}让出CPU后重进
🕹️(002)FreeRTOS主要函数
🕹️(003)FreeRTOS临界区ENTER_CRITICAL
🕹️(004)FreeRTOS NULL未定义问题的解决
🕹️(005)优先级最低的ARM硬件中断PENDSV
🕹️(006)任务优先级层数配置
🕹️(007)不同优先级任务创建注意事项
🕹️(008)关闭同级任务的时间片轮转
🕹️(009)OTA技术
🕹️(010)FreeRTOS静态任务创建
🕹️(011)FreeRTOS列出任务列表
🕹️(012)FreeRTOS堆空间使用量统计
🕹️(013)FreeRTOS通过任务名获取TaskHandle
🕹️(014)FreeRTOS常用任务创建方式
🕹️(015)FreeRTOS解决优先级反转的任务死锁
🕹️(016)FreeRTOS超级中断:SVC
🕹️(017)FreeRTOS中断处理函数运行在特权级
🕹️(018)FreeRTOS SVC进入用户模式的方法
🕹️(019)FreeRTOS实现绝对时间间隔开始任务
🕹️(020)FreeRTOS低功耗通过Tickless实现
🕹️(021)FreeRTOS IdleHook
🕹️(022)FreeRTOS Hooks
🕹️(023)FreeRTOS主动让出CPU
🕹️(024)FreeRTOS信号量
🕹️(025)FreeRTOS解决优先级反转问题的方法
🕹️(026)FreeRTOS获得任务的优先级
🕹️(027)FreeRTOS设置任务的优先级
🕹️(028)FreeRTOS中函数的前缀
🕹️(029)硬件中断中不能调用FreeRTOS的函数
🕹️(030)底半操作的任务接收信号量处理数据
🕹️(031)启用无限期等待
🕹️(032)中断处理函数中调用FreeRTOS的函数
🕹️(033)对于FreeRTOS顶半与底半操作的原则
🕹️(034)STM32中的FATFS支持exFat
🕹️(035)FreeRTOS中的消息队列
🕹️(036)FreeRTOS中的定时任务
🕹️(037)默认生成代码没法ping板子的原因
🕹️(038)LwIP Tcp Server开发例程
🕹️(039)切记别用mutex
🕹️(040)MEMP与Pbuf的关系
🕹️(041)FreeRTOS连接ESP WiFi(待完成)
📟(001)CMSIS标准学习
🕹️(001)函数调用被优化
    本文仅提供在家办公的程序员一个代码备份的方案:搭建异机备份代码的路由器U盘Git仓库。

    搭建过程需要的设备为一台中等性能以上的路由器和一个高速耐用的U盘。

    如果您的路由器原本不支撑OpenWrt路由器系统,请移步百度搜索在您的现有路由器上安装OpenWrt的解决方案。
    如果您的路由器原本就是OpenWrt路由器,恭喜您,您的路由器可以做很多有用的事情。


    先看吸引你的地方:

    不论是远程的Git仓库还是本地的Git仓库,Git仓库的管理不是服务程序,而是静态的命令行命令,比如:git push命令和git pull命令。远程的git仓库下载到本地用的是linux自带的ssh服务。


    以下是在OpenWrt路由器上安装和使用最简git服务的过程:

    安装步骤为:
    1、putty连接路由器的操作系统OpenWrt
    用户名为root
    密码为您的路由器的管理员密码

    2、在路由器中插入U盘,判断U盘是哪个分区:
    打入命令:df
    显示内容中的U盘为/dev/sda4:
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/sda4             30687104        32  30687072   0% /tmp/mountd/disk1_part1

    3、判断U盘的文件系统路由器是否支持读写:
    cd /tmp/mountd/disk1_part1
    mkdir aaaaa

    4、只有在必要的时候,再给U盘格式化(谨慎操作,如果U盘是FAT32文件系统,则不需要做以下操作,OpenWRT默认支持FAT32文件系统)
    mkfs.ext4 /dev/sda4

    5、自动挂载U盘为外置硬盘文件夹:
    1)创建文件系统挂载点:mkdir /mnt/usb
    2)修改/etc/config/目录下的fstab文件,加入U盘的自动挂载:
    config mount
	option target /mnt/usb
	option device /dev/sda4
	option fstype vfat
	option options rw,sync
	option enabled 1
    配置完成后执行如下命令让其生效:
    /etc/init.d/fstab enable
    3)重启路由器
    4)验证U盘已自动挂载入系统
    df -T
    Filesystem           Type       1K-blocks      Used Available Use% Mounted on
    /dev/root            squashfs       43776     43776         0 100% /rom
    tmpfs                tmpfs         245936       400    245536   0% /tmp
    /dev/ubi0_2          ubifs         175124     24984    145300  15% /overlay
    overlayfs:/overlay   overlay       175124     24984    145300  15% /
    tmpfs                tmpfs            512         0       512   0% /dev
    /dev/sda4            vfat        30687104        56  30687048   0% /mnt/usb
    /dev/sda4            vfat        30687104        56  30687048   0% /tmp/mountd/disk1_part1


    6、如果您的路由器硬盘FLASH特别小,需要挂载U盘为opkg的节点
    1)修改/etc/opkg.conf
    加入:
    dest usb /mnt/usb
    2)安装git程序到U盘
    opkg install git --dest usb

    注意:如果您的路由器特别强悍,相当于一台ARM主机(硬盘也足够大),那么可以直接在OpenWrt系统的界面 应用程序->软件包 中搜索并安装git。


    7、继续注意:git基于ssh、不需要开启任何服务。
    本地git会通过ssh调用服务器上的git命令来解析git-receive-pack、git-upload-pack等文件,来实现git文件的推送和拉取。

    8、在OpenWrt的Linux服务器上初始化git仓库
    cd /mnt/usb/git-repo
    git init --bare project1

    9、使用OpenWrt的root账号上传代码到路由器挂载的备份U盘
    1)在笔记本电脑上,使用PuTTYGen生成双钥
    2)生成之后,在OpenWrt路由器 -> luci -> 系统 -> 管理权 -> SSH密钥 中添加PuTTYGen生成的公钥:
    (注意:是Public Key  for passing into OpenSSH authorized keys file:中的那一段key)
    比如:ssh-ed25519 A************************************************************************************hq eddsa-key-20240924
    3)本地代码库中运行:
    git remote remove origin
    git remote add origin root@192.168.x.x:/mnt/usb/git-repo/project1
    4)使用git
    git add .
    git commit -m "关联备份仓库"
    git push --set-upstream origin master
    输入root的密码即可上传代码

    10、使用工具上传代码
    1)可在TortoiseGit中配置origin的url为root@192.168.x.x:/mnt/usb/git-repo/project1
    2)指定使用PuTTYGen生成的私钥ppk
    3)保存配置后,即可使用TortoiseGit来上传和下载代码了

    至此,以上已完成外挂U盘当Git仓库的操作。

    以下观看Fat32的读写性能有多低:

    11、外挂Fat32格式U盘写速度检测:
time dd if=/dev/zero of=test.dbf bs=8k count=100
100+0 records in
100+0 records out
real    0m 6.29s
user    0m 0.00s
sys     0m 0.04s

实际写速度:8k*100/6.29s=127k/s

    12、外挂Fat32格式U盘读速度检测:
time dd if=/dev/sda4 of=/dev/null bs=8k count=1280
100+0 records in
100+0 records out
real    0m 0.03s
user    0m 0.00s
sys     0m 0.00s

实际读速度:8k*1280/0.03s=330M/s

    13、U盘格式化为ext4格式后,写速度:
time dd if=/dev/zero of=./test.dd bs=8k count=1280
1280+0 records in
1280+0 records out
real    0m 0.03s
user    0m 0.00s
sys     0m 0.03s

8k*1280/0.03s=330M/s

    14、U盘格式化为ext4格式后,读速度:
time dd if=./test.dd of=/dev/null bs=8k count=1280
1280+0 records in
1280+0 records out
real    0m 0.01s
user    0m 0.00s
sys     0m 0.00s

8k*1280/0.01s=1000M/s

    15、更改为ext4格式后的U盘的读写速度有飞跃式地提高,读速度达到1GB/s,写速度达到33MB/s,基本上等于U盘的读写速度。
    又一个需要注意的点是:git只适合存储代码等文本文件,不适合保存大文件,大文件用Samba,Samba比起git飞速。

    16、使用其他账号来上传代码:

    (这一章节原本打算继续深入归纳总结的,但是,不想写了,也不想深入去总结了,个人开发、自己用,以上配置过程已经足够了)

    1)创建git组及git用户:
    adduser git
    addgroup git
    adduser git git
    (如果需要删除用户和组,则使用命令:deluser、delgroup)
    2)禁用git用户的shell登录
    编辑/etc/passwd中的以下行:
    git:x:1001:1001:,,,:/home/git:/bin/bash
    改为:
    git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

    17、OpenWrt挂载U盘当Git或Samba服务器的其他注意内容:
    1)外挂U盘自动挂载的功能需要在OpenWrt的软件仓库中安装block-mount模块,而后进行/etc/config/fstab文件的配置。
    2)OpenWrt支持的所有配置功能的命令,都在/etc/init.d/目录下。
    3)为了达到秒级的定时任务,需要以以下方式实现:
sync-per-5s.sh:

#!/bin/sh
while true
do
    sync
    sleep 5
    #echo “synced” > /mnt/usb/synced.log
done

    并在rc.local中加入:
    /etc/sync-per-5s.sh 2>&1 > /dev/null &

    4)为了防止OpenWrt的硬件CPU过热,还需要加入ARM64的CPU温度监测程序。
    5)还有一个有用工具是调整分区大小的工具:fdisk和parted



    18、树莓派4B硬件搭建无线AP(Access Point)的方法:

    1)OpenWrt相关网络知识:

        一个硬件设备<-必须对应->唯一的一个物理接口

        逻辑接口的例子:loopback接口

        (1)一个物理接口或者一个逻辑接口<->就是一个设备<->一个设备只有一个Mac地址,用于物理通信
        (2)一个硬件接口(Interface)也就是一个Mac地址,可以绑定多个IP地址
        (3)网卡的Mac地址是硬件串口交换数据的硬件地址,所以,一个网卡只有一个Mac地址,也就是对应一个硬件接口(Interface)
        (4)地址解析协议,ARP协议:解析网络层地址来找寻数据链路层地址的网络传输协议,以通过物理串口发送数据
        (5)局域网中的ARP广播:问当前网络中的所有节点,告诉自己在当前网络中谁的IP地址是xxx.xxx.xxx.xxx
        (6)局域网中,一个网卡可以多次响应不停IP地址的ARP请求广播:告诉网络中的其他设备,自己的多个IP地址绑定

    2)OpenWrt配置无线接入点(Access Point)步骤:

        (1)增加网桥IP地址作为管理端IP比如:192.168.x.1/24以及192.168.x.2/24,修改网桥默认IP为192.168.1.2以区别上级路由器IP地址。
        (2)配置网桥的网关地址为路由器地址:192.168.1.1。
        (3)配置无线网卡的硬件通信Master服务,树莓派4B的Channel选择5240MHz(实际传输速率360Mbit/s,也就是45MByte/s,这个通道很稳定,速度也不慢)。
        (4) 给无线网卡的Master服务配置一个接口,并给这个接口设置IP地址用于数据的TCP/IP传输,例如IP地址设置为192.168.2.3(必须与路由器的IP地址不在同一个网段上),网关设置为191.168.1.1(也就是上级路由器的IP地址)。

    19、OpenWrt搭建Samba服务器,一定要在/etc/config/samba***中配置用户和密码:
        option user ‘user’
        option password ‘password’

    20、爱国者U盘是好U盘。
    对于创意,别人可以仿造;对于程序代码,会写的不只有我一个。所以,对于未创业的个人,何必担心盗贼的偷抢?代码完全可以放到装有其他应用的OpenWrt路由器的Git上。

    21、树莓派4B硬件与高速移动硬盘有硬件冲突,所以,树莓派4B上没法使用高速硬盘,特别是没法在树莓派4B上使用SanDisk高速移动硬盘。

    22、爱国者的U盘够用也足够快。

«
——张人杰·www.v-signon.com学习者共勉
返回上一页
备案号:京ICP备19038994号-2
个人作品网站:www.up-task.com 主办:个人 English
网站内容如有侵权,请联系删除:1307776259@qq.com