第一章、系统烧写及初始配置
目录
情况二,启动时 未输出 /etc/init.d/S80network Log信息
前言
虽然从事研发好多年,但最近刚接触linux嵌入式开发,有机会使用海思的SS928进行流媒体相关功能的开发,记录一下使用过程,和大家共同学习。
一、固件编译和烧写
固件编译和烧写可以参考论坛官网的专栏文章
SS928/SD3403 —— 教你快速入门_专栏_易百纳技术社区
注意 用ToolPlatform工具烧写时,选择“烧写eMMC”选项-选择分区表文件烧写(因为厂家提供的是eMMC的boot文件),点击“烧写”后需要断电重插,第二块核心板插入第一套的开发板后reset按钮无效,需要拔/插电源才能烧写成功。
注意:有时候遇到网口烧录失败,需要排查下烧录工具中的 phyaddr地址 uboot可能用的是eth1网口,网线需要接到开发板的eth1口,可以插拔网线切换试下不需要重新烧录,网络通了 可以自动执行。
烧写成功后,用串口工具连接ss928,分别执行如下四条指令进入linux系统,就可以上电进入linux系统了。
setenv bootargs 'mem=132928K console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p3 rootfstype=ext4 rw rootwait blkdevparts=mmcblk0:1M(boot),12M(kernel),128M(rootfs)';
setenv bootcmd 'mmc read 0 0x42000000 0x800 0x6000;bootm 0x42000000';
sa
re
二、文件系统存储空间调整
在烧录固件后,芯片中文件系统通常和文件系统镜像一样大,但是EMMC中还空余巨大的空间,需要通过修改bootargs的分区参数,将剩余的空间分配给文件系统镜像所在的分区。
-
rom磁盘空间调整
可查看专栏文章进行配置
使用emmc为启动介质的版本emmc采用mtd分区,首先需要通过修改bootargs的分区参数,将剩余的空间分配给文件系统镜像所在的分区,最后的"-"表示使用剩余全部空间。
setenv bootargs 'mem=512M console=ttyAMA0,115200 clk_ignore_unused root=/dev/mmcblk0p3 rootfstype=ext4 rw rootwait blkdevparts=mmcblk0:1M(boot),12M(kernel),-(rootfs)';
//存储配置
sa
//重启系统
re
设置好启动参数后启动进入系统使用resize2fs(将移植后的resize2fs文件拷入芯片)命令重新设置分区中文件系统的大小。
resize2fs /dev/mmcblk0p3
使用df命令重新查看分区,是否已经扩展成功
df -hm -a
-
ram内存分配调整
板载4/8G的ram内存,但是设置uboot时,只分配给了系统很小的可用内存,可以采用如下方法设置;
- 烧写系统后 uboot环境中 执行了 setenv bootargs 'mem=132928K ...,可以将 bootargs 'mem=132928K 替换为 512M 增大系统可用的ram内存空间
- 修改/ko/loab*的一个文件,将系统内存大小设置为和bootargs一致即可;(实测未设置/ko下面的文件也生效了,设置bootarts后 重启系统 ko/loadb*下面的配置自动修改了)
三、系统ip及网口配置
1.系统IP配置
-
情况一
系统启动后,部分Boot 默认系统会在启动时 Log出ip地址和网络配置文件,如下:
[RCS]: /etc/init.d/S80network
IP: 192.168.X.X
GATEWAY: 192.168.X.X
...
这种情况 直接编辑 /etc/init.d/S80network 文件修改ip和网关就可以;
-
情况二,启动时 未输出 /etc/init.d/S80network Log信息
可以直接在文件/etc/init.d/rcS中修改,添加ifconfig 设置如下,系统启动时会设置ip等信息
#! /bin/sh
/bin/mount -a
ifconfig eth0 192.168.1.13 netmask 255.255.255.0
# 没添加这行的话就只能ping通局域网里面的ip,但不能ping通外网
route add default gw 192.168.1.1
注:如果 /etc/init.d/rcS 有调用如情况一的network文件 在rcS种配置的会被再次覆盖,设置无效
2.网口状态查看及配置
SS928有两个外接网口 eth0和eth1,如果驱动有问题,且eth0接了光口,自协商没法协商到千兆,然后系统启动后用ethtool强制设置成了千兆,就无法兼容百兆的网络接口和设备,可以输入命令查看下。
//查看网卡状态
dmesg | grep gmac
//输出如下
gmac_v200 10290000.ethernet: invalid resource
gmac_v200 10290000.ethernet (unnamed net_device) (uninitialized): using random MAC address e2:9c:b7:6e:c6:e9
gmac_v200 102a0000.ethernet: invalid resource
gmac_v200 102a0000.ethernet (unnamed net_device) (uninitialized): using random MAC address 06:cb:65:2e:be:97
gmac_v200 102a0000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/tx
gmac_v200 102a0000.ethernet eth1: Link is Down
或用ethtool命令查看
~ # ethtool eth0
Settings for eth0:
Supported ports: [ TP AUI BNC MII FIBRE ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric Receive-only
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 1000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: No
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 1
Transceiver: external
Auto-negotiation: off
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
设置 适配只支持100M网口的设备,可以写入/etc/rc.d/rc 文件中开机执行脚本
//ethtool来禁用网卡自适应特性,必须同时指定链路速度100M和全双工工作模式
ethtool -s eth0 speed 100 duplex full autoneg off
若要eth0重启后这些配置依然生效,亦可修改文件/etc/sysconfig/network-scripts/ifcfg-eth0 在文件中添加: ETHTOOL_OPTS="speed 100 duplex full autoneg off";但是海思没有sysconfig 等网卡配置文件,不知到ethtool的配置该放哪里;
//可以用 ifconfig 命令 临时 禁用或者启用某个 网口,启用 up
ifconfig eth1 down
DNS配置,直接编辑(没有的话会自动创建),保存 /etc/resolv.conf 文件即可
//编辑或生成dns配置文件
vi /etc/resolv.conf
//输入dns地址 后保存
nameserver 8.8.8.8
nameserver 114.114.114.114
如果直接编辑或生成resolv.conf文件 无效则先执行 如下命令,会自动生成该文件
//替换为对应的 网口号即可,运行后可能网络无法访问,重启系统即可
udhcpc -i eth2
old绿联USB网卡驱动是 ax88179_178a (海思linux默认开启了)
新绿联 type-c 的 网卡驱动是 RTL8152,需要在 linux内核编译前在menuconfig中(搜索8152或r8152) 开启该驱动后再编译内核,启用该驱动
四、ssh及 zfile服务部署配置
可参考技术论坛
需要注意,将 的 openssl 和zlib服务 make install 后的所有子文件夹,如include、bin等文件夹都拷贝到根目录,lib 拷贝到lib64目录,
代码如下(示例):
# 拷贝ssh相关文件
cp ~/nfs/openssh/usr / -r
cp ~/nfs/openssh/var / -r
cp ~/nfs/openssh/etc/ssh /usr/local/etc -r
# 拷贝库 libz.so.1文件在PC端的install/zlib/lib下
cp ~/nfs/libz.so.1 /lib64
# 添加sshd用户 sshd 是账户 x是密码 74是id 不通账户不可重复
echo "sshd:x:74:74::/var/empty/sshd:/sbin/nologin" >> /etc/passwd
# 修改PATH环境变量
echo "export PATH=$PATH:/usr/local/bin:/usr/local/sbin" >> /etc/prefile
source /etc/prefile
# 生成host密钥,可以不执行这四条命令
ssh-keygen -t rsa -f /usr/local/etc/ssh_host_rsa_key
ssh-keygen -t dsa -f /usr/local/etc/ssh_host_dsa_key
ssh-keygen -t ecdsa -f /usr/local/etc/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /usr/local/etc/ssh_host_ed25519_key
# 重制密钥,切换到 /etc/ssh 路径下执行,可直接生成上面的key
ssh-keygen -A
# 启动ssh服务,先执行su 再启动
/usr/local/sbin/sshd
# 如遇 启动无响应可能启动失败,需要 先结束进程,再启动
ps -aux|grep sshd|grep -v grep
# 修改root 密码,然后修改 sshd的配置文件运行root账号登录
# 运行 passwd accountName -a des 可以修改指定的账号密码(-a修改账号算法 为 des)
passwd -a des
sshd的配置文件的位置:/usr/local/etc/sshd_config,但是实测 配置文件和key 用的都是 /etc/ssh路径下的,实测 系统重启后移植的sshd服务 启动失败,需要等待10分钟左右才能成功,故根据厂家重新提供的.deb安装包重新安装,如下:
论坛ssh安装文档参考
SSH 安装包下载地址
SS928(SD3403) opensshdeb适配包_资料_易百纳技术社区
//要使用dpkg功能必须创建dpkg需要的目录以及文件
mkdir -p /var/lib/dpkg
mkdir -p /var/lib/dpkg/info
touch /var/lib/dpkg/status
将下载的 openssh.tar.gz 安装包拷贝到ss928芯片中,解压,运行busybox脚本
//解压
tar -zxvf openssh.tar.gz -C /home/ssh_package
cd /home/ssh_package
//安装当前路径下所有的.deb文件
./busybox dpkg -i *.deb
安装后使用dpkg -l
命令查看软件包状态
输出如下:
Name Version
+++-==============-==============
ii ebaina-openssh 9.3p1
ii ebaina-zlib 1.2.13
ii ebaina-openssl 1.1.1l
ii ebaina-haveged 1.9.2
然后配置:
- 配置系统密码
输入passwd命令,根据提示输入新密码即可 - 配置允许root用户登录
在/etc/ssh/sshd_config
文件中将#PermitRootLogin prohibit-password
改为PermitRootLogin yes
- 配置允许密码登录
在/etc/ssh/sshd_config
文件中将#PasswordAuthentication yes
选项打开PasswordAuthentication yes
五、Usart1串口1配置
海思SS928 4pin的串口一 地址 /dev/ttyAMA1,默认复用为了GPIO口,需要修改寄存器地址,将该接口配置为usart1串口功能,可以在系统初始化时执行如下脚本
//修改 usart1 接口 为 串口1功能(默认成了 gpio口),需要在启动后执行 如下两条命令
bspmm 0x102f0060 0x1201
bspmm 0x102f0064 0x1201
总结
以上就是本章节要讲的内容,本文仅仅简单介绍了固件及系统烧录、ip、存储扩展配置及ssh服务的部署,其中涉及一些常用的linux指令,记录一下分享给大家,也加深自己的记忆,下一章会讲到海思inux设备的取流、推流的相关知识点。