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

【接口】PCIe M.2 SSD Socket 3接口信号详述

一、接口定义

1、PCIE <–> M2

2、SATA <–> M 2

二、管脚详细说明

M.2接口有SATA和PCIE两种总线,协议分别是AHC 。NVME,非易失性内存主机控制器接口规范(Non-Volatile Memory express),是一个逻辑设备接口规范。

M.2
SATA3.0总线PCIE3.0总线
          AHCI协议        NVME协议
600MB/秒3,200MB/秒

NVME协议跑在PCIE总线上,由于速率的不同,耦合电容的选取值有所不同,PCIE1.0和PCIE2.0的AC耦合电容选取值的范围在75nf-265nf(可以选用0.1uF的电容); PCIE3.0的AC耦合电容选取值的范围在176nf-265nf(可以选用0.22uF的电容);

PCIE时钟需要100nF电容耦合

走SATA的话,耦合电容需要是12nF以下

三、电路参考设计

CPU端设计,需要在TX端加电容,如下图:

M.2接口端设计如下:

        如果PCIE够用,M.2接口最大可以接入四对PCIE。两对也可以使用,只是 速率低一些。

下图便是LED的设计,外部M.2设备会在通讯是操作PIN10,所以板卡设计上可以设计一个LED,也可以做一个座子,可以接入LED线束。

M.2的座子,69PIN是区分设备是PCIE还是SATA设备。

        NC,H 为PCIE

        GND,L为SATA

如果考虑周到一些,可以在电源上再多加一些东西,如下:

使用FB隔离电源,加TVS管,保护后级电源。

【Openwrt】脚本自动部署守护进程

#!/bin/bash
openwrt(){
	echo "***************************************************"
	echo "*			Welcom to OpenWrt Platform				*"
	echo "***************************************************"

    # check_deps
    local source_dir="$PWD"
    local service_file="/etc/init.d/rulex.service"
    local executable="/usr/local/rulex"
    local working_directory="/usr/local/"
    local config_file="/usr/local/rulex.ini"
    local db_file="/usr/local/rulex.db"
cat > "$service_file" << EOL
#!/bin/sh /etc/rc.common

START=180

USE_PROCD=1

start_service() {
	procd_open_instance
	procd_set_param command "$executable run -config=$config_file -db=$db_file" 
	procd_set_param respawn 0
	procd_close_instance
}

stop_service(){
	service_stop "$executable"
}
EOL
	
	mkdir -p $working_directory
    chmod +x $source_dir/rulex
    cp -rfp "$source_dir/rulex" "$executable"
    cp -rfp "$source_dir/rulex.ini" "$config_file"
    
	chmod 777 $service_file
	$service_file enable 
	$service_file start 
	
    if [ $? -eq 0 ]; then
        echo "[√] Rulex service has been created and extracted."
    else
        echo "[x] Failed to create the Rulex service or extract files."
    fi
    exit 0
}

【Openwrt】lm-sensors-3-6-0 cannot find -liconv

当我们编译lm-sensors模块试会发现提示错误cannot find -liconv。

通过log分析试没有把相应的libconv.a库拷贝到lm-sensors lib里。

解决方式:

cp ./build_dir/target-aarch64_generic_musl/libiconv/libiconv.a ./build_dir/target-aarch64_generic_musl/lm-sensors-3-6-0/lib/

【golang】go版本上级

一、删除旧版本

sudo rm -rf /usr/local/go
sudo apt-get remove golang
sudo apt-get remove golang-go
sudo apt-get autoremove

二、方法一

sudo add-apt-repository ppa:longsleep/golang-backports 
sudo apt-get install golang-go

如果要安装指定版本:
sudo apt-get install golang-1.11-go

如果add-apt-repository不存在,通过以下命令安装进行按照:

sudo apt-get install software-properties-commonsudo 
apt-get update

三、方法二

sudo snap install go --classic

【Linux】实现spidev驱动添加

一、功能配置

1、make menuconfig

2、修改设备树

&spi3 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&spi3m1_cs0 &spi3m1_pins>;
        spi_test@00 {
                compatible = "rockchip,rk-spidev";
                reg = <0>;
                spi-max-frequency = <5000000>;
        };
};

3、修改驱动文件

vim spidev.c
增加compatible 匹配设备树参数。

static const struct spi_device_id spidev_spi_ids[] = {
        { .name = "dh2228fv" },
        { .name = "ltc2488" },
        { .name = "sx1301" },
        { .name = "bk4" },
        { .name = "dhcom-board" },
        { .name = "m53cpld" },
        { .name = "spi-petra" },
        { .name = "spi-authenta" },
        { .name = "rk-spidev" },
        {},
};
static const struct of_device_id spidev_dt_ids[] = {
        { .compatible = "rohm,dh2228fv", .data = &spidev_of_check },
        { .compatible = "lineartechnology,ltc2488", .data = &spidev_of_check },
        { .compatible = "semtech,sx1301", .data = &spidev_of_check },
        { .compatible = "lwn,bk4", .data = &spidev_of_check },
        { .compatible = "dh,dhcom-board", .data = &spidev_of_check },
        { .compatible = "menlo,m53cpld", .data = &spidev_of_check },
        { .compatible = "cisco,spi-petra", .data = &spidev_of_check },
        { .compatible = "micron,spi-authenta", .data = &spidev_of_check },
        { .compatible = "rockchip,rk-spidev", .data = &spidev_of_check },
        {},
};

二、测试spidev设备

【docker】docker迁移位置

在系统长期运行器件,会出现硬盘使用占满的情况。这时候需要考虑docker容器迁移。步骤如下:

一、增加硬盘,挂载位置

1、创建硬盘

fdisk /dev/sdb

2、格式化硬盘

mkfs.ext4 /dev/sdb1

3、挂载硬盘

mkdir /mnt/tHDD
mount /dev/sdb1 /mnt/tHDD

4、自动挂载硬盘

blkid /dev/sdb1

vim /etv/fstab

UUID=e3746c50-ace6-4c88-bcf7-175ebbdcf13f /mnt/tHDD   ext4 error=remount-ro 0 

二、迁移docker文件

1、拷贝文件

cp -rfp /var/lib/docker /mnt/tHDD

注意:cp 指令需要添加p参数,防止拷贝过程中被修改文件权限。

2、修改配置

vim /etc/docker/daemon.json

{

"data-root": "/mnt/tHDD/docker",
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]

}

3、重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

注意:如果是多dockers,最好重启机器。

【RK3568】 idbloader.img 打包【RK3568】

一、早期打包方式

cd u-boot
tools/mkimage -n ${PLAT} -T rksd -d ${TPL_BIN} idbloader.img
cat ${SPL_BIN} >> idbloader.img

二、现在打包方式

1、脚本方式

cd uboot
# 打包官方提供的ddr与miniloader的bin文件
./make.sh --idblock ../rkbin/RKBOOT/xxxx.ini 
# 打包自己编译的tpl与spl的bin文件
./make.sh --idblock --tpl --spl ../rkbin/RKBOOT/xxxx.ini 

2、mkimage方式

./tools/mkimage -n ${PLAT} -T rksd -d ${TPL_BIN}:${SPL_BIN} idblock.bin

3、生成的 idblock.bin 与 idbloader.img 是一样的,重命名就行:

mv idblock.bin idbloader.img