全志T113-S3开发板遇到的问题
1.静态网络问题
在/etc/config/network文件下,没有添加dns,还有ula_prefix没有修改可能会导致ping不上电脑的情况
config interface 'loopback'option ifname 'lo'option proto 'static'option ipaddr '127.0.0.1'option netmask '255.0.0.0'config globals 'globals'option ula_prefix 'fd78:2a29:f6e0::/48'config interface 'wan'option ifname 'eth0'option proto 'static'option ipaddr '192.168.10.50'option netmask '255.255.255.0'option gateway '192.168.10.1'option dns '192.168.10.1 8.8.8.8'option ip6assign '60'
dns相关的视频:
发现更多精彩视频 - 抖音搜索
2.scp传输问题
调试的时候发现目标设备能够ping通,但是老是有Connection refused的现象,于是尝试了一下的步骤:
1.查看是否存在sshd的进程
ps | grep sshd
发现是有的
2.关闭防火墙重新scp连接,发现还是不行
iptables -F
3.接着手动启动ssh服务的时候发现输出了几行数据
/usr/sbin/sshd # 手动启动
数据如下
root@TinaLinux:/# /usr/sbin/sshd # 手动启动 Unable to load host key "/etc/ssh/ssh_host_rsa_key": invalid format Unable to load host key "/etc/ssh/ssh_host_rsa_key": invalid format Unable to load host key: /etc/ssh/ssh_host_rsa_key Unable to load host key "/etc/ssh/ssh_host_ecdsa_key": invalid format Unable to load host key "/etc/ssh/ssh_host_ecdsa_key": invalid format Unable to load host key: /etc/ssh/ssh_host_ecdsa_key Unable to load host key "/etc/ssh/ssh_host_ed25519_key": invalid format Unable to load host key "/etc/ssh/ssh_host_ed25519_key": invalid format Unable to load host key: /etc/ssh/ssh_host_ed25519_key sshd: no hostkeys available -- exiting.
交给ai发现一条关键信息:
Unable to load host key "/etc/ssh/ssh_host_rsa_key": invalid format
...
sshd: no hostkeys available -- exiting.
表示SSH 服务无法启动,因为缺少有效的主机密钥文件。
解决办法:
# 1. 删除无效的密钥文件
rm -f /etc/ssh/ssh_host_*# 2. 重新生成所有必需的密钥
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""# 3. 确认密钥已生成
ls -l /etc/ssh/ssh_host_*# 4. 启动 SSH 服务
/usr/sbin/sshd
接着再一次scp指令,主机会出现:
于是在终端输入
ssh-keygen -f ~/.ssh/known_hosts -R 192.168.10.50
之后便可以重新和开发板进行ssh服务并且可以使用scp传输了
scp <传输文件> root@192.168.10.50:/mnt/UDISK
另外插一嘴,关于不知道开发板密码的重置方法:
1 在目标板子的终端中执行:
# 设置 root 密码passwd root
然后输入你想要设置的新密码(比如 root
或 123456
)。
3.scp能连接,但是遇到密码的问题
首先在开发板上修改
# 设置 root 密码passwd root
检查但是/etc/shadow 中root的第三个数字0表示最后一次修改的时间和1970开始的时间搓一样,表明修改一直没有提交上
于是修改为设置空密码
vi /etc/ssh/sshd_config
编辑文件
将这两个变量前的#号去除。发现,可以免密码了,但是任然不行
最后找到原因了:是因为
vi /etc/shadow
下的root行中的第3个字段为0表示的,失败的是0表示从1970年从未修改过
root::1000:0:99999:7::: # 第3个字段改为1000,第8个字段保持空
将其修改成1000天即可
更多的字段修改可以参考:
用户名:密码哈希:最后修改时间:最小修改间隔:最大有效期:警告时间:不活动时间:过期时间:标志
4.应用工程需要的setenv环境变量文件
PATH=$PATH:/home/gary/linux/T113S3/Tina-Linux/prebuilt/gcc/linux-x86/arm/toolchain-sunxi-musl/toolchain/bin
export STAGING_DIR=/home/gary/linux/T113S3/Tina-Linux/out/t113-zqboard/staging_dir/target
5.应用工程启动脚本
#!/bin/sh. ./setenvarm-openwrt-linux-gcc <目标源文件名>.c -o <目标程序名字>
6.编译sdk前记得配置环境变量并载入配置
source build/envsetup.sh
lunch 8
7.重新清理工程并menuconfig
rm -rf tmp/ build_dir/ .config # 彻底清理旧配置
make defconfig # 重新扫描所有包
make menuconfig # 打开菜单配置
8.检查makefile TAB键的新方法
cat -t package/HelloWorld/Makefile
9.检查打包的pack是否存在于工程
grep "包名" tmp/.config-package.in
10.修改pack的menuconfig
一个正常的makefile如下
# 确保TOPDIR正确
TOPDIR?=.$(info TOPDIR is set to: $(TOPDIR))include $(TOPDIR)/rules.mk# 尝试多个可能的路径
ifneq ("$(wildcard $(TOPDIR)/include/package.mk)","")include $(TOPDIR)/include/package.mk
else ifneq ("$(wildcard $(TOPDIR)/build/package.mk)","")include $(TOPDIR)/build/package.mk
else ifneq ("$(wildcard $(TOPDIR)/package/package.mk)","")include $(TOPDIR)/package/package.mk
else$(error Cannot find package.mk! Please check your Tina-Linux installation)
endifPKG_NAME:=helloworld
PKG_VERSION:=1.0
PKG_RELEASE:=1
PKG_MAINTAINER:=Your Name <your.email@example.com>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)define Package/helloworldSECTION:=utilsCATEGORY:=UtilitiesTITLE:=Hello WorldDEPENDS:= +libncnn +libstdcppARCH:=armCPU:=cortex-a7
endefdefine Package/helloworld/descriptionSimple Hello World program.
endefdefine Build/Preparemkdir -p $(PKG_BUILD_DIR)$(CP) ./src/* $(PKG_BUILD_DIR)/
endefdefine Build/Compile$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) -o $(PKG_BUILD_DIR)/helloworld $(PKG_BUILD_DIR)/helloworld.c
endefdefine Package/helloworld/install$(INSTALL_DIR) $(1)/usr/bin$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/bin/
endef$(eval $(call BuildPackage,helloworld))
讲解:
1. Makefile 结构解析
1.1 基础设置部分
TOPDIR?=.
$(info TOPDIR is set to: $(TOPDIR))
include $(TOPDIR)/rules.mk
-
作用:设置构建系统的顶层目录
-
说明:
-
TOPDIR?=.
:如果未定义 TOPDIR,则设为当前目录 -
$(info ...)
:打印调试信息,帮助定位问题 -
include $(TOPDIR)/rules.mk
:包含构建系统核心规则文件
-
1.2 包含 package.mk
ifneq ("$(wildcard $(TOPDIR)/include/package.mk)","")
include $(TOPDIR)/include/package.mk
else ifneq ("$(wildcard $(TOPDIR)/build/package.mk)","")
include $(TOPDIR)/build/package.mk
else ifneq ("$(wildcard $(TOPDIR)/package/package.mk)","")
include $(TOPDIR)/package/package.mk else
$(error Cannot find package.mk!
Please check your Tina-Linux installation) endif
-
作用:包含包管理文件
-
说明:
-
尝试多个可能的路径查找 package.mk
-
如果都找不到,抛出错误信息
-
这是必要的,因为 package.mk 包含构建包的关键宏定义
-
1.3 包基本信息
PKG_NAME:=helloworld
PKG_VERSION:=1.0
PKG_RELEASE:=1
PKG_MAINTAINER:=Your Name <your.email@example.com>
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
-
作用:定义包的基本信息
-
说明:
-
PKG_NAME
:包名称(在系统中唯一标识) -
PKG_VERSION
:软件版本号 -
PKG_RELEASE
:包发布版本(用于区分同一版本的不同构建) -
PKG_MAINTAINER
:维护者信息(可选但推荐) -
PKG_BUILD_DIR
:构建目录路径
-
1.4 包定义
define Package/helloworld
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Hello World
DEPENDS:= +libncnn +libstdcpp
ARCH:=arm CPU:=cortex-a7 endef
-
作用:定义包的属性和依赖
-
说明:
-
SECTION
:包所属的节(通常与 CATEGORY 相同) -
CATEGORY
:在 menuconfig 中的分类位置 -
TITLE
:包的简短描述 -
DEPENDS
:包的依赖项 -
ARCH
:目标架构 -
CPU
:目标 CPU 类型
-
1.5 包描述
define Package/helloworld/descriptionSimple Hello World program.
endef
-
作用:提供包的详细描述
-
说明:在 menuconfig 中显示,帮助用户了解包的功能
1.6 构建准备
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
-
作用:准备构建环境
-
说明:
-
创建构建目录
-
将源代码复制到构建目录
-
1.7 编译过程
define Build/Compile
$(TARGET_CC) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) -o $(PKG_BUILD_DIR)/helloworld $(PKG_BUILD_DIR)/helloworld.c
endef
-
作用:编译源代码
-
说明:
-
TARGET_CC
:目标平台的 C 编译器 -
TARGET_CFLAGS
:C 编译标志 -
TARGET_LDFLAGS
:链接器标志 -
将源文件编译为可执行文件
-
1.8 安装定义
define Package/helloworld/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/bin/endef
-
作用:定义如何安装包
-
说明:
-
$(1)
:表示目标根文件系统目录 -
创建安装目录
/usr/bin
-
将可执行文件复制到目标位置
-
1.9 注册包
$(eval $(call BuildPackage,helloworld))
-
作用:调用宏注册包
-
说明:这是构建系统的关键步骤,使构建系统知道如何处理这个包