Categories
cmd

香橙派设置wifi热点

  • hostapd:用于创建 WiFi 热点
  • dnsmasq:提供 DNS 和 DHCP 服务
  • git:用于下载 create_ap 工具
sudo apt update &&
sudo apt upgrade -y
sudo apt install -y hostapd dnsmasq git

若已经有 create_ap 命令 可跳过

# 克隆仓库
git clone https://github.com/oblique/create_ap.git
cd create_ap
# 安装工具
sudo make install

查看系统中的无线网卡(通常为 wlan0 或 wlx 开头):

找到类似 wlan0 的无线接口名称(确保你的 Orange Pi 5 Max 已安装 WiFi 驱动,能识别无线网卡)。

ip link show


确认有线网卡名称(用于共享网络,通常为 eth0或lo):

ip -br addr show

基本命令格式(替换为你的信息):

sudo create_ap [无线网卡] [有线网卡] [热点名称] [热点密码]
示例(假设无线网卡为 wlan0,有线网卡为 eth0):
sudo create_ap wlan0 eth0 OrangePi_Hotspot 12345678

热点名称:OrangePi_Hotspot(可自定义)
密码:12345678(至少 8 位,可自定义)

先停止当前运行的热点(按 Ctrl+C)。

创建系统服务实现自启:

创建服务文件

sudo nano /etc/systemd/system/orangepi-hotspot.service

粘贴以下内容(根据你的网卡和热点信息修改):

[Unit]
Description=Orange Pi WiFi Hotspot
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/create_ap wlan0 eth0 OrangePi_Hotspot 12345678
Restart=always
[Install]
WantedBy=multi-user.target


启用并启动服务:

sudo systemctl enable orangepi-hotspot
sudo systemctl start orangepi-hotspot

热点启动失败:

检查无线网卡是否被占用(如已连接其他 WiFi),先断开:

sudo nmcli device disconnect wlan0

确认 hostapd 服务未冲突:

sudo systemctl stop hostapd

设备无法连接:

密码长度是否至少 8 位
尝试更换信道:

sudo create_ap wlan0 eth0 OrangePi_Hotspot 12345678 --channel 6

无网络访问:

确认有线网卡 eth0 已连接互联网
检查 IP 转发是否开启:

sudo sysctl -w net.ipv4.ip_forward=1

font awesome

https://fontawesome.com/v4/icons/

线上对比网站

Categories
java

ruoyi-mall

上架流程

上架

下单流程

流程

退款流程

退款

Categories
php

php 闭包传值处理

方法 1:使用 use 关键字按引用传递(最直接的方法)

这是最常用和最直接的方法。通过在使用 use 时在变量前加上 & 符号,你可以按引用传递变量。这意味着闭包内外的变量指向同一个内存地址,在闭包内修改它,外部的值也会同步改变。php复制下载

$externalValue = 10;
$anotherVariable = "Hello";

$myClosure = function() use (&$externalValue, $anotherVariable) {
    // 修改按引用传递的变量
    $externalValue += 50; // 这会影响外部的 $externalValue
    
    // 这是按值传递的,修改它不会影响外部的 $anotherVariable
    $anotherVariable .= " World"; 
    
    echo "Inside closure: externalValue = $externalValue, anotherVariable = $anotherVariable\n";
};

$myClosure(); // 输出:Inside closure: externalValue = 60, anotherVariable = Hello World

echo "Outside: externalValue = $externalValue\n"; // 输出:Outside: externalValue = 60
echo "Outside: anotherVariable = $anotherVariable\n"; // 输出:Outside: anotherVariable = Hello




关键点:

  • use (&$variable):按引用传递,内部修改影响外部。
  • use ($variable):按值传递(默认),内部修改影响外部。闭包使用的是它创建时该变量的一个副本
Categories
windows server

IIS 更换SSL证书

通过 certd 获取证书crt和私钥key

通过命令生成PFX文件(大部分win server 需要用旧算法生成)

openssl pkcs12 -macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -out ./cert1.pfx -inkey ./cert.key -in ./cert.pem -passout pass:abc123

参数解释

-macalg SHA1 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES

指定旧算法兼容windows server

-export -out ./cert1.pfx

指定输出的文件

-inkey ./cert.key -in ./cert.pem

指定私钥 指定证书

-passout pass:abc123

指定pfx密码

windows server 操作

打开mmc

进入MMC

添加和删除管理单元 选择证书服务

添加完证书服务后

选择个人证书

执行导入

选择PFX文件

密码为生成PFX的密码 且设置为可导出

设置为个人分类后完成

设置友好名称

打开IIS

选择服务器根证书 确保有新添加的证书

选择我的网站 点击右边的绑定

选择我的服务端口

选择另新证书点击确定

Categories
Uncategorized

Rust raspberry GPIO

[dependencies] gpio-cdev = “0.4”

Categories
rust

Rust 安装

curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh

. “$HOME/.cargo/env”

Categories
linux

emmc烧写后 文件系统扩容

lsblk                         # 查看磁盘和分区信息
df -h                         # 查看文件系统使用情况

输出

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
mmcblk0     179:0    0   64G  0 disk
├─mmcblk0p1 179:1    0  256M  0 part /boot
└─mmcblk0p2 179:2    0    8G  0 part /         # 仅用了 8G,剩余空间未分配

先更新硬盘索引

. 进入 fdisk 交互模式扩展分区
bash
sudo fdisk /dev/mmcblk0
然后依次输入以下命令(括号内是说明,不要输入):

p (打印当前分区表,再次确认第二分区的起始扇区)

d (删除分区)

2 (选择删除第二个分区)

n (新建分区)

p (选择主分区)

2 (分区号,仍设为2)

输入刚才记录的起始扇区(例如 106496,务必与原起始一致,否则系统无法启动)

结束扇区直接回车(表示使用剩余的全部空间)

如果提示 “Partition #2 contains a ext4 signature”,选择 N(不要移除签名)

w (写入分区表并退出)

3. 重启系统,让内核重新识别分区表

/ 代表的就是跟文件系统分区 要扩容就是这个分区扩容

sudo resize2fs /dev/mmcblk0p2  # 扩展 ext4 文件系统
Categories
linux

rootfs.img 修改root账号密码 并设置允许ssh访问

sudo mount -o loop rootfs.img ~/mount_dir

挂载镜像到某个目录

修改root账号密码

sudo vim /etc/shadow

修改密码文件

root:!:19475:0:99999:7:::

!或*代表该账号无法登录

数据段说明

用户名:加密密码:最后修改时间:最小密码年龄:最大密码年龄:警告期:不活动期:过期时间:保留字段
mkpasswd -m sha-512

执行该命令然后输入密码 替换上面的加密密码段

修改ssh配置允许root访问

/etc/ssh/sshd_config

修改配置文件

PermitRootLogin yes  # 修改后重启 SSH 服务:sudo systemctl restart sshd

设置允许root 密码登录

Categories
linux

uboot kernel rootfs 关系

在嵌入式Linux系统中,U-Boot、Kernel(内核)和Rootfs(根文件系统) 是三个核心组件,它们分工协作,共同完成系统启动和运行。以下是它们的相互关系和作用:


1. U-Boot(Bootloader)

  • 作用:硬件初始化、引导加载内核。
  • 功能
    • 初始化CPU、内存、时钟等硬件。
    • 提供交互式命令行(可选),用于调试或配置启动参数。
    • 从存储设备(如eMMC、SD卡、Flash)加载内核镜像(zImageuImage)和设备树(dtb)到内存。
    • 传递启动参数(如根文件系统位置、控制台设备等)给内核。
  • 输出:将控制权移交内核。

2. Kernel(Linux内核)

  • 作用:管理系统硬件资源、提供核心服务。
  • 功能
    • 进一步初始化硬件(如驱动加载、中断管理)。
    • 挂载根文件系统(Rootfs)到 / 目录。
    • 启动用户空间的第一个进程(通常是 init 或 systemd,PID=1)。
  • 依赖:需要U-Boot正确加载内核镜像,并传递正确的启动参数(如root= 指定Rootfs位置)。

3. Rootfs(根文件系统)

  • 作用:提供用户空间环境和应用程序运行基础。
  • 内容
    • 系统工具(如/bin/sbin)。
    • 配置文件(如/etc)。
    • 库文件(如/lib)。
    • 用户程序(如/usr)。
  • 挂载时机:由内核根据启动参数(如root=/dev/mmcblk0p2)挂载。
  • 关键文件/sbin/init 或 /lib/systemd/systemd(第一个用户进程)。

三者的协作流程

  1. 硬件上电 → U-Boot执行,初始化硬件。
  2. U-Boot 加载内核镜像和设备树到内存,传递参数(如console=ttyS0 root=/dev/nfs)。
  3. 内核 启动,解压自身并初始化子系统(进程调度、驱动等)。
  4. 内核 挂载Rootfs(从Flash、NFS、RAM等设备)。
  5. 内核 启动Rootfs中的init进程,进入用户空间,完成系统启动。

关键依赖关系

  • U-Boot依赖:需适配硬件(如DDR初始化代码、存储驱动)。
  • 内核依赖:需匹配硬件架构(如ARM/X86)和U-Boot传递的参数。
  • Rootfs依赖:需包含内核驱动的对应模块(如文件系统驱动、设备节点)。

常见问题

  • 启动失败:若U-Boot未正确加载内核,系统无法启动。
  • 内核恐慌(Kernel Panic):通常因找不到或无法挂载Rootfs。
  • Rootfs损坏:系统可能启动但无法进入用户空间(如/bin/sh缺失)。

类比理解

  • U-Boot:像电脑的BIOS,负责“唤醒”硬件。
  • Kernel:像操作系统内核,管理硬件和资源。
  • Rootfs:像C盘的Windows系统文件,提供运行环境。

通过三者协同,嵌入式系统从硬件上电到完整启动,最终运行应用程序。