STM32 Experiment & Note —— 🖥️(001) 异机备份低功耗自用Git服务器搭建 (Not translated)
»
(001) HAL Library LED Lighting
(002) HAL Library LCD Frame Animation
(003) HAL Library FFT Dynamic Spectrum
(004) HAL Library FFT Speed Up
(005) HAL Library Understanding DMA
(006) Watchdog Summary
(007) GPIO Usage Steps
(008) CubeIDE Implementation of USB Peripherals*
(009) Why C99
(010) Linux UDP
(011) Linux TCP
(012) Temperature Control of Arm
(013) OpenWrt cross-compilation
(014) Basic data type in C99
(015) C99 struct
(016) C99 enum
(017) C99 funciont and L-Value, R-Value
(018) C99 pointer*
(019) C99 With only value assignment*
(020) C99 array with space, pointer with no space
(021) C99 No template function
(022) POSIX pthread multi-threads mutex*
(023) POSIX pthread multi-threads programming*
(024) C99 if
(025) C99 switch
(026) C99 loop
(027) C99 time and wait*
(028) High-precision calculation with GMP*
(029) Web Service Lib*
(030) International Components for Unicode (ICU)*
(031) Performance of C is higher than C++, because...*
(032) C99 weak function
(033) MTU TCP SOCKET
(034) STM32 UART Continually Sending Data
(035) STM32 UART Continually Receiving Data
(037) STM32 Normal and Circle
(038) STM32 UART clear transfer error flag
(039) STM32 UART Idle Callback
(040) STM32 UART, RS232 single TX line
(041) STM32 RS485 Differential signal communication
(042) STM32 HAL DMA Poll For Transfer
(043) STM32 enter low power comsuption mode
(044) STM32 Clear Flag of TCx in DMA IRQ
(045) STM32软件函数命名规范
(046) Deal with Idle in xxxCpltCallback
(047) C99 Built in macros
(048) isr enabled after calling ***_IT
(049) Procedure of starting STM32
(050) Load new firmware online
(051) SCB->VTOR
(052) STM32 Address space in programme
(053) STM32 Move program to other space
(054) STM32 Bootloader
(055) Keil中的下载算法
(056)编译器优化出错点
🍓(001) Close Swapfile
🍓(002) Format USB disk to ext4 with 1k blocks
🍓(003) Query Linux Version info and CPU info
🍓(004) Speed up latest version of Ubuntu
🍓(005) Clone 360 Browser Core Source Code Script
🍓(006) Before run Firefox in Ubuntu24.04
🍓(007) MAC Address
🍓(008) RMII & PHY
🍓(009) Ubuntu Server firewall configuration
🍓(010) Linux yield cpu by code
🍓(011) Linux Hardware Concept
🍓(012) Linux Inter-Process Communication
🍓(013) Ban Git force push
🍓(014) Ban Git reset --hard
🍓(015) Save unsaved cache to disk immedutely
🍓(016) 拷贝pre-receive到每个git仓库的脚本
🍓(017) sshd密码输入错误禁用IP3分钟
🖥️(001) 异机备份低功耗自用Git服务器搭建
🖥️(002) OpenWRT配置注意事项
🕹️(001) while(1){} cpu reentered
🕹️(002) functions for multi-thread in FreeRTOS
🕹️(003) FreeRTOS critical code zone
🕹️(004) FreeRTOS fix NULL not defined error
🕹️(005) lowest priority interrupt of ARM: PENDSV
🕹️(006) Configuration of tasks priority levels
🕹️(006) Cautions of different priority tasks locked
🕹️(008) Close scheduling of same priority tasks
🕹️(009) OTA Technology
🕹️(010) FreeRTOS create static task
🕹️(011) FreeRTOS list task list
🕹️(012) FreeRTOS HeapSize statistics
🕹️(013) FreeRTOS xTaskGetHandle
🕹️(014) FreeRTOS common method of create tasks
🕹️(015) FreeRTOS fix problem of tasks locked
🕹️(016) FreeRTOS Superest interrupt: SVC
🕹️(017) FreeRTOS interrupt call in privilege mode
🕹️(018) FreeRTOS SVC enter user mode
🕹️(019) FreeRTOS delay util
🕹️(020) FreeRTOS low consumption by Tickless
🕹️(021) FreeRTOS IdleHook
🕹️(022) FreeRTOS Hooks
🕹️(023) FreeRTOS yield CPU by code
🕹️(024) FreeRTOS semaphore
🕹️(025) FreeRTOS resolve priority inversion
🕹️(026) FreeRTOS get task priority
🕹️(027) FreeRTOS set task priority
🕹️(028) FreeRTOS function prefix
🕹️(029) Don't call RTOS function in IRQ handle
🕹️(030) Bottom half operation decrease semaphore
🕹️(031) Support Suspending for ever
🕹️(032) Call FreeRTOS SysCall in ISR
🕹️(033) Principle of Top Half and bottom haf
🕹️(034) FATFS in STM32 support exFat
🕹️(035) Message Queue in FreeRTOS
🕹️(036) Timer Tasks in FreeRTOS
🕹️(037) Reason of can not ping board
🕹️(038) LwIP Tcp Server Sample Code
🕹️(039) mutex equals binarySempahore
🕹️(040) Relationship between MEMP and 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盘够用也足够快。

«
--Alex.Zhang
--www.v-signon.com Learningers Co-Encouraged
Back
Personal Art: www.up-task.com Unit: Individual
中文 Русский 京ICP备19038994号-2
If the content on this website infringes upon your any rights, please contact me at 1307776259@qq.com for removal