当我们编译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/
当我们编译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/
找到contents.c文件,增加#include <sys/sysmacros.h>头文件。
vim tools/mklibs/Makefile
HOST_FIXUP:=autoreconf
include $(BUILD_DIR)/host-build.mk
HOST_CFLAGS += -I$(CURDIR)/include
+HOST_CPPFLAGS += -std=gnu++98
define Host/Install
$(INSTALL_BIN) \
$(HOST_BUILD_DIR)/src/mklibs \
$(HOST_BUILD_DIR)/src/mklibs-copy \
$(HOST_BUILD_DIR)/src/mklibs-readelf/mklibs-readelf \
$(STAGING_DIR_HOST)/bin/
endef
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
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容器迁移。步骤如下:
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
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,最好重启机器。
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
1、查看配置使用哪个DDR驱动
vim $(RKSDK)/rkbin/RKBOOT/RK3568MINIALL.ini
由配置文件可知我们使用的 ddr bin 文件是:rk3568_ddr_1560MHz_v1.18.bin
2、修改波特率
修改$(RKSDK)/rkbin/tools/ddrbin_param.txt 波特率参数
3、更新DDR驱动文件
cd $(RKSDK)/rkbin/tools
./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.13.bin //bin文件的名字需要和 RK3568MINIALL.ini 文件中保持一致。
vim configs/rk3568_defconfig
openwrt是直接通过boot.scr获取内核启动地址及其他配置参数的,所以只需要重新更新波特率参数,重新生成boot.scr就可以了。话说boot.scr是由mkimage工具根据boot.cmd参数生成的。
1、创新boot-bsp.cmd文件
# 写入以下内容
#setenv bootargs console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
#setenv bootm_boot_mode sec
#setenv machid 1029
#load mmc 0:1 0x41000000 uImage
#load mmc 0:1 0x41d00000 script.bin
#bootm 0x41000000
# 第一行setenv命令,设定了变量bootargs(启动参数)为:通过tty0和ttyS0串口输出启动信息;启动失败延迟5秒重启,根文件在TF卡的第二分区,可读写;
# 第二行指定了bootm 模式
# 第三行指定解析设备树
# 第四行指定了将压缩后的内核uImage加载到 0x41000000 的位置
# 第五行指定了将 script.bin 加载到 0x41d00000 的位置
# 第六行为从加载地址启动内核的命令
part uuid mmc ${devnum}:3 uuid
setenv bootargs "console=ttyS2,115200 console=tty2 earlycon=uart8250,mmio32,0xfe660000 root=PARTUUID=${uuid} rw rootwait"
load mmc ${devnum}:2 ${fdt_addr_r} rockchip.dtb
load mmc ${devnum}:2 ${kernel_addr_r} kernel.img
booti ${kernel_addr_r} - ${fdt_addr_r}
2、生成boot.scr文件
./tools/mkimage -C none -A arm -T script -d boot-bsp.cmd boot.scr
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc,char **argv)
{
char filename[128]="";
strcpy(filename,argv[1]);
printf("filename:%s\r\n",filename);
FILE *fp = fopen(filename, "rb+");
if (fp == NULL)
{
printf("文件打开失败\n"); return -1;
}
int num_bytes = 10; // 要删除的字节数
fseek(fp, -num_bytes, SEEK_END);
ftruncate(fileno(fp), ftell(fp));
fclose(fp);
return 0;
}