1-海思ss927编译 rootfs 并成功替换
- error while loading shared libraries: libc.so -> /lib64 # cp libc.so.6 libc.so 或者 ln -s libc.so.6 libc.so 即可
- 加一个新的分区:
# ubi.mtd=4 因为 mtdparts=nand:512K(boot),512K(env),512K(bl31),13M(kernel),32M(rootfs) 文件系统在第4个索引 bootargs=mem=128M console=ttyAMA0,115200 clk_ignore_unused root=ubi0:ubifs rootfstype=ubifs rw ubi.mtd=4 mtdparts=nand:512K(boot),512K(env),512K(bl31),13M(kernel),32M(rootfs),32M(fixed) bootcmd=nand read 0x40010000 0x100000 0x80000; ipcboot bl31 0x40010000; nand read 0x44000000 0x180000 0xd00000; ipcboot uimgfdt 0x44000000 # ====== root=ubi0:ubifs : 根文件系统的设备路径被指定为 ubi0:ubifs ubi.mtd=4: 告诉内核将 mtd4 分区初始化为一个 UBI 设备, UBIFS 是基于 UBI 的文件系统 - 打包内容烧录并给新的分区: ./mkubiimg.sh fixed 2k 128k ./fixed 32M ../../../pub/bin/pc 0

- 把新的分区挂载到文件系统:ubiattach /dev/ubi_ctrl -m 5 ; mount -t ubifs /dev/ubi1_0 /fxw/mnt_fixed
- 烧录完成后优化:默认的 文件系统目录 有默认的 ko、so、和默认的 busybox 功能
- 复制sdk里的ko 到 文件系统目录
- cp -rf /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/smp/a55_linux/mpp/out/ko usr/fx-ko-lib/sdk_smp_mpp_out_ko
- 复制需要的 so 到 文件系统目录
- cp -rf /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/smp/a55_linux/mpp/out/lib usr/fx-ko-lib/sdk_smp_mpp_out_lib
- 在 sdk/SS928V100_SDK_V2.0.2.2/open_source/busybox/busybox-1.31.1 目录 make menuconfig 添加新的功能,如 telnet , 然后编译, 编译完了之后把 _install 里的目录 复制到 文件系统目录下面
- make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- menuconfig
- make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- -j5
- make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- install
- cd /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/osdrv/pub/rootfs_glibc_arm64
- cp -rf /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/open_source/busybox/busybox-1.31.1/_install/bin .
- cp -rf /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/open_source/busybox/busybox-1.31.1/_install/linuxrc .
- cp -rf /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/open_source/busybox/busybox-1.31.1/_install/sbin/ .
- cp -rf /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/open_source/busybox/busybox-1.31.1/_install/usr/bin usr/
- cp -rf /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/open_source/busybox/busybox-1.31.1/_install/usr/sbin usr/
- 在 /etc/profile 里面设置 PATH 和 LD_LIBRARY_PATH 环境变量(由于没有用户目录,所以这些环境变量都在这里编写,不用在 .bashrc 里面)
/etc/profile
# /etc/profile: system-wide .profile file for the Bourne shells # # set_path_before() { [ -d $1 ] && PATH="$1:$PATH" } PATH="/usr/bin:/usr/sbin:/bin:/sbin" set_path_before /usr/local/sbin set_path_before /usr/local/bin export PATH export LD_LIBRARY_PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/fx-ko-lib/sdk_smp_mpp_out_lib:/usr/fx-ko-lib/sdk_smp_mpp_out_lib/npu \ :/usr/fx-ko-lib/sdk_smp_mpp_out_lib/svp_npu
- /etc/init.d 里面的脚本也会开机运行,我在这里面加载 ko ,运行程序等操作
/etc/init.d/S928fxw
#!/bin/sh echo ========= run S928fxw ========= CURRENT_DIR=`pwd` # pushd /usr/fx-ko-lib/sdk_smp_mpp_out_ko/; ./load_ss928v100 -i; popd # pushd、popd 识别不了 cd /usr/fx-ko-lib/sdk_smp_mpp_out_ko/; ./load_ss928v100 -i; cd $CURRENT_DIR # 这里请在 busybox 里面打开,并复制到文件系统目录 telnetd &
- 修改网络配置文件/etc/init.d/S80network
/etc/init.d/S80network
#!/bin/sh ipaddr=192.168.50.208 bootp= gateway=192.168.50.1 netmask=255.255.255.0 hostname=ss927 netdev=eth0 autoconf= for ipinfo in `cat /proc/cmdline` do case "$ipinfo" in ip=*) for var in ipaddr bootp gateway netmask hostname netdev autoconf do eval read $var done << EOF `echo "$ipinfo" | sed "s/:/\n/g" | sed "s/^[ ]*$/-/g"` EOF ipaddr=`echo "$ipaddr" | cut -d = -f 2` [ x$ipaddr == x ] && ipaddr=x ;; esac done [ -z "$ipaddr" ] && exit 0 echo " IP: $ipaddr" echo " BOOTP: $bootp" echo " GATEWAY: $gateway" echo " NETMASK: $netmask" echo "HOSTNAME: $hostname" echo " NETDEV: $netdev" echo "AUTOCONF: $autoconf" if [ x$ipaddr == x- ] ; then # use DHCP : else cmd="ifconfig $netdev $ipaddr" [ x$netmask != x- ] && cmd="$cmd netmask $netmask" eval $cmd [ x$gateway != x- ] && route add default gw $gateway fi ifconfig lo 127.0.0.1
- 复制sdk里的ko 到 文件系统目录
- 文件系统的目录: sdk/SS928V100_SDK_V2.0.2.2/osdrv/pub/rootfs_glibc_arm64 , 这个目录就是文件系统的目录, 就是想办法把这些目录压缩成 .ubifs 格式,然后烧录到板端就好了
- 压缩文件系统目录的脚本:sdk/SS928V100_SDK_V2.0.2.2/osdrv/tools/pc/ubi_sh , 这个目录下有压缩文件系统的脚本:mkubiimg.sh
- 执行压缩命令:/mkubiimg.sh ss927v100 2k 128k /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/osdrv/pub/rootfs_glibc_arm64 64M /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/osdrv/pub/bin/pc 0 ,其实每个参数在同目录的 readme.txt 都有解释,这里我用自己的理解说一下:
- ss927v100: 就是一个生成后的目标用于识别的名字,应该可以随便写
- 2k: NAND page size. 2k/4k/8k. // 根据 flash 决定
- 128k: NAND block size. 128k/256k/1M // 根据 falsh 决定
- /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/osdrv/pub/rootfs_glibc_arm64:就是你要压缩的文件系统的目录的位置
- 64M:NAND中的分区大小 // 这个就是文件系统的大小,这个越大启动就越慢一点
- /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/osdrv/pub/bin/pc: mkfs.ubifs 生成的路径,但是我最终生成的 rootfs_ss927v100_2k_128k_64M.ubifs 就在我的脚本同目录下
- 0: 同时保留ubiimg和ubifs(1:是 0:否(默认))
- 执行完成后 在脚本的同目录下 生成有 rootfs_ss927v100_2k_128k_64M.ubifs
- 执行压缩命令:/mkubiimg.sh ss927v100 2k 128k /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/osdrv/pub/rootfs_glibc_arm64 64M /home/fx/share/sdk/SS928V100_SDK_V2.0.2.2/osdrv/pub/bin/pc 0 ,其实每个参数在同目录的 readme.txt 都有解释,这里我用自己的理解说一下:
- 现在得到了压缩的 文件系统目录的文件了,要考虑怎么把它烧录到板端了?
- 打开烧录工具,选择按分区烧录:
分区表.xml
<?xml version="1.0" encoding="GB2312" ?> <Partition_Info ProgrammerFile=""> <Part Sel="1" PartitionName="fastboot" FlashType="nand" FileSystem="none" Start="0" Length="1M" SelectFile="C:\Users\lin\Desktop\新建文件夹 (3)\boot_image.bin"/> <Part Sel="1" PartitionName="" FlashType="nand" FileSystem="none" Start="1M" Length="15M" SelectFile="C:\Users\lin\Desktop\新建文件夹 (3)\fip.bin"/> <Part Sel="1" PartitionName="" FlashType="nand" FileSystem="none" Start="16M" Length="-" SelectFile="C:\Users\lin\Desktop\新建文件夹 (3)\rootfs_ss928v100_2k_128k_128M.ubifs"/> </Partition_Info>-
按照这个分区表,把 uboot、kernel、rootfs 都烧录一遍,由于 uboot 还是用的朴工的,所以 uboot 传递给 kernel的参数要手动改一下,改成向分区表一样:
修改 uboot 传递给 kernel 参数
朴工的uboot信息: printenv: bootargs=mem=512M console=ttyAMA0,115200 clk_ignore_unused ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs rw mtdparts=nand:2M(boot),12M(kernel),32M(rootfs),64M(usrfs),8M(dss),-(reserve) bootcmd=nand read 0x50000000 0x200000 0xc00000;bootm 0x50000000 bootdelay=1 bootfile="uImage" 自己修改的: setenv bootargs 'mem=512M console=ttyAMA0,115200 tee_enable clk_ignore_unused ubi.mtd=2 root=ubi0:ubifs rootfstype=ubifs rw mtdparts=nand:1M(uboot),15M(kernel),-(rootfs)'; setenv bootcmd 'nand read 0x42000000 0x100000 0xf00000;bootm 0x42000000'; sa re # 0x100000 是1MiB(5个0) 、 0x80000 是 512KiB(4个0) # rw mtdparts=nand:1M(uboot),15M(kernel),-(rootfs) : 这里只有 3个分区了,和分区表一致,朴工的有好几个分区 # nand read 0x42000000 0x100000 0xf00000: 从0x100000地址开始读取 0xf00000 大小到0x42000000, 就是从 1m的地方开始读取 15m 到 0x42000000 # bootm 0x42000000:运行 0x42000000 地方的程序 #其它参数 # md.b 0x44000000 64; // 输出64个log 信息, 如:setenv bootcmd 'nand read 0x44000000 0x100000 0xc00000; md.b 0x44000000 64; bootm 0x44000000 - 0x45000000' # debug 输入更多信息如:setenv bootargs 'mem=128M console=ttyAMA0,115200 debug root=ubi0:ubifs ...
- 打开烧录工具,选择按分区烧录:
本文来自博客园,作者:封兴旺,转载请注明原文链接:https://www.cnblogs.com/fxw1/p/18563652

浙公网安备 33010602011771号