WhyCan Forum(哇酷开发者社区)

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn

您尚未登录。

#1 2019-04-25 16:43:31

晕哥
管理员
注册时间: 2017-09-06
累计积分: 9,190

荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

这个帖子我反复操作实践了很长时间才搞定, 现在大大方便了Linux kernel/dtb/rootfs/app 的调试
这个帖子我反复操作实践了很长时间才搞定, 现在大大方便了Linux kernel/dtb/rootfs/app 的调试
这个帖子我反复操作实践了很长时间才搞定, 现在大大方便了Linux kernel/dtb/rootfs/app 的调试

参考: http://linux-sunxi.org/Initial_Ramdisk





2019-04-26_163531.png

2019-04-26_163242.png

2019-04-26_170303.png


run.bat 文件内容:

"bin\sunxi-fel.exe" -p uboot u-boot-sunxi-with-spl.bin write 0x41000000 zImage write 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb write 0x41900000 boot_fel_initrd.scr write 0x41A00000 rootfs.cpio.gz.uImage

@echo "download complete! now run linux ..."
@sleep 5




文件下载: v3s_s3_fel_autorun_linux_uart0_pb8_pb9.7z

离线

#2 2019-04-25 16:59:48

晕哥
管理员
注册时间: 2017-09-06
累计积分: 9,190

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

使用最新的 u-boot: 编译 V3s 2019 版本的 u-boot






(文件已经在一楼附件内)










2019-05-08 更新:
---------------------------------

mkimage -C none -A arm -T script -d boot.cmd boot.scr

用这个命令生成 scr 文件

离线

#3 2019-04-25 16:59:50

晕哥
管理员
注册时间: 2017-09-06
累计积分: 9,190

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

参考: https://whycan.cn/t_444.html

sunxi-fel 需要修改fel.c

#define SPL_MAX_VERSION            2 /* maximum supported version */

改为 3:

#define SPL_MAX_VERSION            3 /* maximum supported version */


然后重新编译, 否则 sunxi-fel 不会解析传递 scr 环境变量参数给 u-boot.



(文件已经在一楼附件内)

离线

#4 2019-04-25 16:59:52

晕哥
管理员
注册时间: 2017-09-06
累计积分: 9,190

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

Linux zero-4.13.y 和 buildroot 编译参考这个: 荔枝派Zero V3s开发板入坑记录 (TF/SD卡启动)(主线Linux,主线u-boot)



文件系统打包成 initramfs:

cd /opt/buildroot-2018.08.2/output/target

find . | cpio -o -Hnewc |gzip -9 > ../rootfs.cpio.gz

mkimage -A arm -T ramdisk -C none -n uInitrd -d ../rootfs.cpio.gz  /var/www/html/rootfs.cpio.gz.uImage

mkimage -A arm -T ramdisk -C none -n uInitrd -d ../rootfs.cpio.gz  ../rootfs.cpio.gz.uImage



(文件已经在一楼附件内)

离线

#5 2019-04-26 22:06:38

Freeboy
会员
注册时间: 2018-12-03
累计积分: 42

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

顶起,更新系统方便,大大的赞!

离线

#6 2019-04-27 09:25:49

zhenfanhei
会员
注册时间: 2018-01-18
累计积分: 257
个人网站

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

顶起,调试烧录更方便了

离线

#7 2019-04-28 09:28:55

Jmhh247
会员
注册时间: 2018-12-21
累计积分: 262

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

真的方便

离线

#8 2019-05-08 09:36:50

rayfoxjx
会员
注册时间: 2019-04-23
累计积分: 24

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

晕哥 说:

Linux zero-4.13.y 和 buildroot 编译参考这个: 荔枝派Zero V3s开发板入坑记录 (TF/SD卡启动)(主线Linux,主线u-boot)



文件系统打包成 initramfs:

cd /opt/buildroot-2018.08.2/output/target

find . | cpio -o -Hnewc |gzip -9 > ../rootfs.cpio.gz

mkimage -A arm -T ramdisk -C none -n uInitrd -d ../rootfs.cpio.gz  ../rootfs.cpio.gz.uImage



(文件已经在一楼附件内)

uboot命令的SCR文件是怎么生成的?

离线

#9 2019-05-08 09:57:10

晕哥
管理员
注册时间: 2017-09-06
累计积分: 9,190

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

https://whycan.cn/t_682.html

mkimage -C none -A arm -T script -d boot.cmd boot.scr

用这个命令生成.


更新到2楼

离线

#10 2019-07-10 20:20:49

guo_felix
会员
注册时间: 2018-04-12
累计积分: 21

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

晕哥 说:

Linux zero-4.13.y 和 buildroot 编译参考这个: 荔枝派Zero V3s开发板入坑记录 (TF/SD卡启动)(主线Linux,主线u-boot)



文件系统打包成 initramfs:

cd /opt/buildroot-2018.08.2/output/target

find . | cpio -o -Hnewc |gzip -9 > ../rootfs.cpio.gz

mkimage -A arm -T ramdisk -C none -n uInitrd -d ../rootfs.cpio.gz  /var/www/html/rootfs.cpio.gz.uImage

mkimage -A arm -T ramdisk -C none -n uInitrd -d ../rootfs.cpio.gz  ../rootfs.cpio.gz.uImage



(文件已经在一楼附件内)

请教一下晕哥   f1c100s initramfs制作是直接在buildroot中file system勾选 cpio  以及uboot image,然后是在buildroot  system configure里面在/dev management里面要选上mdev,是吗? 

这种和引用的这种用命令的方式有什么区别吗?因为一开始不知道,按照命令来做f1c100s的文件系统结果是无法挂载。

离线

#11 2019-07-10 21:00:09

晕哥
管理员
注册时间: 2017-09-06
累计积分: 9,190

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

忘记是否要勾选了, 你自己试一试.

离线

#12 2019-07-10 22:24:28

guo_felix
会员
注册时间: 2018-04-12
累计积分: 21

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

嗯嗯   是已经成功启动了  只是怕有一些没注意到的地方 谢谢晕哥

离线

#13 2019-10-11 11:00:12

baiymhmy
会员
注册时间: 2018-08-15
累计积分: 13

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

晕哥 说:

使用最新的 u-boot: 编译 V3s 2019 版本的 u-boot






(文件已经在一楼附件内)










2019-05-08 更新:
---------------------------------

mkimage -C none -A arm -T script -d boot.cmd boot.scr

用这个命令生成 scr 文件

晕哥 你好,如果我想自己编译用于USB直接启动Linux的uboot(2019.10版本),需要修改哪些内容。我看启动命令已经在SCR文件指定了。

离线

#14 2019-10-11 11:19:48

晕哥
管理员
注册时间: 2017-09-06
累计积分: 9,190

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

没有试过2019.10,如果用荔枝派的u-boot, 什么都不用改。

离线

#15 2020-02-25 17:22:51

yytyu
会员
注册时间: 2018-11-01
累计积分: 28

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

mark

离线

#16 2020-03-11 16:46:34

JinC
会员
注册时间: 2019-11-12
累计积分: 10

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

晕哥,我用buildroot-2018.02.10编译出rootfs再转换成rootfs.cpio.gz.uImage,替代 v3s_s3_fel_autorun_linux_uart0_pb8_pb9_201905018_spinand_OK.7z里面的rootfs.cpio.gz.uImage,但是内核启动完后就卡住了,用你原来的就可以正常使用。使用的是华嵌的S3核心板。
制作initramfs时buildroot需要什么特殊配置么。

  1.854836] vcc5v0: disabling
[    1.857810] ALSA device list:
[    1.860777]   #0: V3s Audio Codec
[    1.864661] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[    1.873277] cfg80211: failed to load regulatory.db
[    1.879464] Freeing unused kernel memory: 1024K
[    1.884713] Run /linuxrc as init process
[    1.892990] mmc2: host does not support reading read-only switch, assuming write-enable
[    1.906697] mmc2: new high speed SD card at address 00c3
[    1.923229] mmcblk2: mmc2:00c3 E1601 121 MiB
[    1.936051]  mmcblk2: p1

离线

#17 2020-03-12 10:21:10

JinC
会员
注册时间: 2019-11-12
累计积分: 10

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

零、目的
华嵌的S3核心板烧系统到sdnand
使用晕哥的 <<荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡 by 晕哥>>,直接挂SD_NAND为U盘然后烧录

一、硬件
  华嵌的S3核心板,没有底板,直接核心板上飞线引出5v GND USB+ USB- 调试口UART0
  这块核心板区别于其他开发板 SD NAND是挂在在mmc2上的(PC口sdc2)
   
二、SDK及固件
  华嵌群网盘里提供的uboot(就是 git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-spi-experimental 基础上修改) 及5.1.0的内核

  晕哥帖子里的 v3s_s3_fel_autorun_linux_uart0_pb8_pb9_201905018_spinand_OK.7z

三、分析说明
3.1使用v3s_s3_fel_autorun_linux_uart0_pb8_pb9_201905018_spinand_OK.7z
  3.1.1完整下载
    解压完后利用Run_S3_XiaoZhi.bat里面的命令来下载启动系统,这里及以下我全都是在ubuntu中进行的所以直接用sunxi-tools源码编译后sunxi-fel命令来下载的
   

sudo ../sunxi-tools/sunxi-fel -p uboot u-boot-sunxi-with-spl.bin.S3 write 0x41000000 zImage write 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb.PG9 write 0x41900000 boot_fel_initrd.scr write 0x41A00000 rootfs.cpio.gz.uImage

    串口上的启动信息如下(截取重要的部分):
   

	starting USB...
	No controllers found
	Hit any key to stop autoboot:  0 
	(FEL boot)
	## Executing script at 41900000
	## Loading init Ramdisk from Legacy Image at 41a00000 ...
	   Image Name:   uInitrd
	   Image Type:   ARM Linux RAMDisk Image (uncompressed)
	   Data Size:    2099576 Bytes = 2 MiB
	   Load Address: 00000000
	   Entry Point:  00000000
	   Verifying Checksum ... OK
	## Flattened Device Tree blob at 41800000
	   Booting using the fdt blob at 0x41800000
	   Loading Ramdisk to 42bff000, end 42dff978 ... OK
	   Loading Device Tree to 42bf8000, end 42bfe707 ... OK

	Starting kernel ...
	....
	Initializing random number generator... done.
	Starting network: OK
	[    3.519445] Mass Storage Function, version: 2009/09/11
	[    3.524617] LUN: removable file: (no medium)
	[    3.562885] lun0: unable to open backing file: /dev/mtdblock0
	[    3.568974] g_mass_storage musb-hdrc.1.auto: failed to start g_mass_storage: -2
	[    3.596488] Mass Storage Function, version: 2009/09/11
	[    3.601792] LUN: removable file: (no medium)
	[    3.619020] lun0: unable to open backing file: /dev/mtdblock0
	[    3.624936] g_mass_storage musb-hdrc.1.auto: failed to start g_mass_storage: -2
	modprobe: can't load module g_mass_storage (kernel/drivers/usb/gadget/legacy/g_mass_storage.ko): unknown symbol in module, or unknown parameter

	Welcome to Buildroot
	buildroot login: root
	Password: 
	# ls /dev/m*
	/dev/mem               /dev/memory_bandwidth
	# cat  /etc/init.d/S90mmc0_as_udisk.sh 
	#modprobe g_mass_storage file=/dev/mmcblk0 removable=1
	modprobe g_mass_storage file=/dev/mtdblock0 removable=1
	# 
	

    我们看到登录进入后没有加载mmc2驱动识别sdnand,这样自己手动加载g_mass_storage重指定file也没用

   3.1.2只下载uboot来看一下env
    sudo ../sunxi-tools/sunxi-fel -p uboot u-boot-sunxi-with-spl.bin.S3 write

   

	=> printenv 
	arch=arm
	baudrate=115200
	board=sunxi
	board_name=sunxi
	boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
	boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_i
	boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}extlinux/extlinux.conf
	boot_net_usb_start=usb start
	boot_prefixes=/ /boot/
	boot_script_dhcp=boot.scr.uimg
	boot_scripts=boot.scr.uimg boot.scr
	boot_targets=fel mmc0 usb0 pxe dhcp 
	[color=#FF0000]bootcmd=run distro_bootcmd[/color]
	bootcmd_dhcp=run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test ;
	bootcmd_fel=if test -n ${fel_booted} && test -n ${fel_scriptaddr}; then echo '(FEL boot)'; source ${fel_scriptaddr}; fi
	bootcmd_mmc0=setenv devnum 0; run mmc_boot
	bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
	bootcmd_usb0=setenv devnum 0; run usb_boot
	bootdelay=2
	bootm_size=0x2e00000
	console=ttyS0,115200
	cpu=armv7
	dfu_alt_info_ram=kernel ram 0x41000000 0x800000;fdt ram 0x41800000 0x100000;ramdisk ram 0x41B00000 0x1000000
	distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
	efi_dtb_prefixes=/ /dtb/ /dtb/current/
	fdt_addr_r=0x41800000
	fdtcontroladdr=47b562a8
	fdtfile=sun8i-v3s-licheepi-zero.dtb
	fel_booted=1
	kernel_addr_r=0x41000000
	load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
	mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi
	preboot=usb start
	pxefile_addr_r=0x41A00000
	ramdisk_addr_r=0x41B00000
	scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_de;
	scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devpliste
	scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; fe
	scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then echo Found ${prefix}extlinux/extlinux.i
	scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot e
	scriptaddr=0x41900000
	serial#=12c000014a919244
	soc=sunxi
	stderr=serial@01c28000
	stdin=serial@01c28000
	stdout=serial@01c28000
	usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi

	Environment size: 4054/32764 bytes
	=> 
	

   
    注意这里的bootcmd=run distro_bootcmd 以及没有设定bootargs
    然后再看看里面的scriptaddr、fdt_addr_r等几个地址,理解一下boot_fel_initrd.cmd和Run_S3_XiaoZhi.bat这里面几个地址

3.2使用华嵌提供的SDK
    v3s_s3_fel_autorun_linux_uart0_pb8_pb9_201905018_spinand_OK.7z中的boot_fel_initrd.cmd中会设定bootargs,
    所以首先将华嵌给的uboot中sun8i.h里面#define CONFIG_BOOTARGS       "console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk2p2 rw earlyprintk"这句屏蔽
    顺便再理解一下uboot的修改记录:dts里面的关闭spi0打开mmc2并且配好mmc2的管脚、配置文件中配上CONFIG_MMC_SUNXI_SLOT_EXTRA=2

    利用SDK中编出u-boot-sunxi-with-spl.bin、sun8i-s3-hqembed-050ips.dtb、zImage

    结合楼上提问buildroot编译出来的rootfs用不了,这里使用v3s_s3_fel_autorun_linux_uart0_pb8_pb9_201905018_spinand_OK.7z中的
    rootfs.cpio.gz.uImage再加上里面的boot_fel_initrd.scr

    这样就拼凑完了要用的镜像文件,然后同样的下载
   

sudo ../sunxi-tools/sunxi-fel -p uboot u-boot-sunxi-with-spl.bin write 0x41000000 zImage write 0x41800000 sun8i-s3-hqembed-050ips.dtb write 0x41900000 boot_fel_initrd.scr write 0x41A00000 rootfs.cpio.gz.uImage

    看一下启动信息:
   

	...
	starting USB...
	No controllers found
	Hit any key to stop autoboot:  0 
	switch to partitions #0, OK
	mmc1 is current device
	MMC: no card present
	** Bad device mmc 0 **
	MMC: no card present
	** Bad device mmc 0 **
	## Flattened Device Tree blob at 41800000
	   Booting using the fdt blob at 0x41800000
	   Loading Device Tree to 42df9000, end 42dff707 ... OK

	Starting kernel ...
	.....
	[    0.000000] Kernel command line: console=ttyS0,115200 panic=5 rootwait root=/dev/ram0 rdinit=/linuxrc rw earlyprintk
	....
	[    1.599704] cfg80211: failed to load regulatory.db
	[    1.605126] Waiting for root device /dev/ram0...
	[    1.617593] mmc2: host does not support reading read-only switch, assuming write-enable
	[    1.625824] mmc2: new high speed SD card at address 00c3
	[    1.632978] mmcblk2: mmc2:00c3 E1601 121 MiB 
	[    1.639478]  mmcblk2: p1
	

    我们可以看到bootargs传的对,内核起来后mmc2上也认出了sdnand, 但是卡在了Waiting for root device /dev/ram0...上进行不下去

四、修改
  4.1修改uboot

    此时对比一下3.1与3.2中uboot引导内核时候的打印信息及env,需要修改bootcmd
    将华嵌给的uboot中sun8i.h里面
   
    #define CONFIG_BOOTCOMMAND    "mmc dev 1;fatload mmc 0 $fdt_addr_r $fdtfile;fatload mmc 0 $kernel_addr_r zImage;bootz $kernel_addr_r - $fdt_addr_r"
   

    修改为
   
    #define CONFIG_BOOTCOMMAND    "run distro_bootcmd"
   

   
    别忘了将uboot中sun8i.h里面#define CONFIG_BOOTARGS       "console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk2p2 rw earlyprintk"这句屏蔽

    然后重编出u-boot-sunxi-with-spl.bin,
    再配上3.2中编出的sun8i-s3-hqembed-050ips.dtb、zImage
    v3s_s3_fel_autorun_linux_uart0_pb8_pb9_201905018_spinand_OK.7z中的rootfs.cpio.gz.uImage与boot_fel_initrd.scr

    重新下载运行,看到能正常启动和登录,但有两个问题
   
    mmc2上没有挂载sdnand  ---> 解决见4.2
    modprobe: can't change directory to '5.1.0': No such file or directory 内核版本与rootfs中里面的ko不匹配---> 解决见4.3
   

   
   4.2挂载sdnand
    看一下3.2中当
        CONFIG_BOOTCOMMAND    "mmc dev 1;fatload mmc 0 $fdt_addr_r $fdtfile;fatload mmc 0 $kernel_addr_r zImage;bootz $kernel_addr_r - $fdt_addr_r"
    时能够正常挂载sdnand

    所以修改boot_fel_initrd.cmd,在bootz 0x41000000 0x41A00000 0x41800000前一行mmc dev 1
    然后再mkimage -C none -A arm -T script -d boot_fel_initrd.cmd boot_fel_initrd.cmd.scr 出新的scrpit文件

   4.3重新制作rootfs.cpio.gz.uImage
    用晕哥的v3s_s3_fel_autorun_linux_uart0_pb8_pb9_201905018_spinand_OK.7z中的rootfs.cpio.gz.uImage来逆向

     rootfs.cpio.gz.uImage正向打包的是这样
          cd /opt/buildroot-2018.08.2/output/target
          find . | cpio -o -Hnewc |gzip -9 > ../rootfs.cpio.gz
          mkimage -A arm -T ramdisk -C none -n uInitrd -d ../rootfs.cpio.gz  ../rootfs.cpio.gz.uImage
    逆向:
          mkimage其实就是在原来的文件头上加了0x40个字节的特定头让uboot能引导识别,
          所以先把rootfs.cpio.gz.uImage重命名成bin文件,用随便能编辑bin文件的工具打开,去掉头上的0x40长度的头,再重名文件成rootfs.cpio.gz
          然后gunzip rootfs.cpio.gz出来rootfs.cpio文件,
          再sudo cpio -idmv <rootfs.cpio出来rootfs所有文件
          对这个rootfs补上/dev/concloe /dev/null
          sudo mknod -m 666 console c 5 1
          sudo mknod -m 666 null c 1 3
          这样就提出来了一个完整的rootfs

    替换内核模块:
       删除上面rootfs/lib/modules里面原来的两个内核文件夹,把自己编译的华嵌5.1.0内核模块替换过来

    先屏蔽/etc/init.d/S90mmc0_as_udisk.sh 里面的驱动加载,方便后面调试
    再正向打包生成新的rootfs.cpio.gz.uImage
             
   4.4usb模式
    使用上面
        4.1的u-boot-sunxi-with-spl.bin、
        4.2中的boot_fel_initrd.cmd.scr、
        4.3中的rootfs.cpio.gz.uImage、
        3.2中华嵌5.1.0内核源码编出来的sun8i-s3-hqembed-050ips.dtb与zImage

    下载运行,能识别到sdnand,挂成了/dev/mmcblk2,然后手动
     modprobe g_mass_storage file=/dev/mmcblk2 removable=1
    但是ubuntu电脑上没有任何反应,
    看一下内核sun8i-s3-hqembed-050ips.dts中
    &usb_otg {
    //dr_mode = "otg";
    dr_mode = "host";
    //dr_mode = "peripheral";
    status = "okay";
    };
    我们这里需要usb device模式,将其修改为
    &usb_otg {
    //dr_mode = "otg";
    //dr_mode = "host";
    dr_mode = "peripheral";
    status = "okay";
    };
   
    再重新下载,运行,至此能够在电脑上显示sdnand盘了。

下面就可以用命令来分区和烧写sdnand了

离线

#18 2020-03-12 17:34:21

JinC
会员
注册时间: 2019-11-12
累计积分: 10

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

回复一下前面buildroot编出来转rootfs.cpio.gz.uImage不能启动的问题:
这里重新配一下buildroot,里面Filesystem images ---> 选中cpio the root filesystem (for use as an initial RAM filesystem) 并且 Compression method 选择(gzip)
重新编译完后在buildroot的 out/images/目录下直接有rootfs.cpio.gz
然后用这个文件来加头 mkimage -A arm -T ramdisk -C none -n uInitrd -d ../rootfs.cpio.gz  ../rootfs.cpio.gz.uImage
这样就能正常挂了。
去output/target目录里面手动打cpio再加头出来的rootfs.cpio.gz.uImage没发启动起来。

五、烧写sdnand
接楼上接着进行分区和烧写sdnand
5.0看一下sdnand的信息
我没找到sdnand的数据手册,进入uboot看一下mmcinfo,顺便把mmc擦一下
同3.1.2中方法一样只运行uboot
    sudo ../sunxi-tools/sunxi-fel -p uboot u-boot-sunxi-with-spl.bin.S3 write
进入uboot后
    => mmc list
    SUNXI SD/MMC: 1
    SUNXI SD/MMC: 0 (SD)
    => mmc dev 0
    switch to partitions #0, OK
    mmc0 is current device
    =>
    => mmcinfo 
    Device: SUNXI SD/MMC
    Manufacturer ID: d5
    OEM: 5344
    Name: E1601
    Tran Speed: 50000000
    Rd Block Len: 512
    SD version 1.10
    High Capacity: No
    Capacity: 120.9 MiB
    Bus Width: 1-bit
    Erase Group Size: 512 Bytes
    => mmc erase 0 40000

5.1建分区
按4.4中下载运行全部镜像
我这里是在开发板上直接用命令进行分区,这个pc上fdisk分区有点区别

# fdisk  /dev/mmcblk2
The number of cylinders for this disk is set to 3868.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p
Disk /dev/mmcblk2: 120 MB, 126746624 bytes, 247552 sectors
3868 cylinders, 4 heads, 16 sectors/track
Units: cylinders of 64 * 512 = 32768 bytes

Device       Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type

Command (m for help): u
Changing display/entry units to sectors

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First sector (16-247551, default 16): 2048
Last sector or +size or +sizeM or +sizeK (2048-247551, default 247551): 18431

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First sector (16-247551, default 16): 18432
Last sector or +size or +sizeM or +sizeK (18432-247551, default 247551): Using default value 247551

Command (m for help): p
Disk /dev/mmcblk2: 120 MB, 126746624 bytes, 247552 sectors
3868 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 * 512 = 512 bytes

Device       Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/mmcblk2p1    32,0,1      287,3,16          2048      18431      16384 8192K 83 Linux
/dev/mmcblk2p2    288,0,1     1023,3,16        18432     247551     229120  111M 83 Linux

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): L

 0 Empty                  1b Hidden Win95 FAT32     9f BSD/OS                
 1 FAT12                  1c Hidden W95 FAT32 (LBA) a0 Thinkpad hibernation  
 4 FAT16 <32M             1e Hidden W95 FAT16 (LBA) a5 FreeBSD               
 5 Extended               3c Part.Magic recovery    a6 OpenBSD               
 6 FAT16                  41 PPC PReP Boot          a8 Darwin UFS            
 7 HPFS/NTFS              42 SFS                    a9 NetBSD                
 a OS/2 Boot Manager      63 GNU HURD or SysV       ab Darwin boot           
 b Win95 FAT32            80 Old Minix              b7 BSDI fs               
 c Win95 FAT32 (LBA)      81 Minix / old Linux      b8 BSDI swap             
 e Win95 FAT16 (LBA)      82 Linux swap             be Solaris boot          
 f Win95 Ext'd (LBA)      83 Linux                  eb BeOS fs               
11 Hidden FAT12           84 OS/2 hidden C: drive   ee EFI GPT               
12 Compaq diagnostics     85 Linux extended         ef EFI (FAT-12/16/32)    
14 Hidden FAT16 <32M      86 NTFS volume set        f0 Linux/PA-RISC boot    
16 Hidden FAT16           87 NTFS volume set        f2 DOS secondary         
17 Hidden HPFS/NTFS       8e Linux LVM              fd Linux raid autodetect 
Hex code (type L to list codes): b
Changed system type of partition 1 to b (Win95 FAT32)

Command (m for help): p
Disk /dev/mmcblk2: 120 MB, 126746624 bytes, 247552 sectors
3868 cylinders, 4 heads, 16 sectors/track
Units: sectors of 1 * 512 = 512 bytes

Device       Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/mmcblk2p1    32,0,1      287,3,16          2048      18431      16384 8192K  b Win95 FAT32
/dev/mmcblk2p2    288,0,1     1023,3,16        18432     247551     229120  111M 83 Linux

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table
[  402.950685]  mmcblk2: p1 p2
# sync 
# 

说明一下这里在开发板子中直接使用命令见分区与在宿主机上fdsik是有差距的.
分区说明:
    最头上1M用来放uboot,由于这款SDNAND的sector szie是512字节,所以第一个分区前预留1Mbyte/512byte=2048个sector

    然后第一个分区定为8M,这样他的结束就是2048+8Mbyte/512byte  -1 = 18431,
    这里我用+8M没成功,因为开发板上的fdisk貌似是绝对偏移,不是相对的

    第二个分区就是剩下的所有sector,也就是从18432开始到结束,

5.2建文件系统
继续在开发版上有命令

# mk
mkdir     mkdosfs   mke2fs    mkfifo    mknod     mkpasswd  mkswap    mktemp
# mk
-sh: mk: not found
# mkdosfs --help
BusyBox v1.27.2 (2020-03-11 16:31:30 CST) multi-call binary.

Usage: mkdosfs [-v] [-n LABEL] BLOCKDEV [KBYTES]

Make a FAT32 filesystem

        -v      Verbose
        -n LBL  Volume label
# mkdosfs -n 'boot' /dev/mmcblk2p
mmcblk2p1  mmcblk2p2
# mkdosfs -n 'boot' /dev/mmcblk2p1
# mkdosfs -n 'boot' /dev/mmcblk2p1^C
# mke2fs --help
BusyBox v1.27.2 (2020-03-11 16:31:30 CST) multi-call binary.

Usage: mke2fs [-Fn] [-b BLK_SIZE] [-i INODE_RATIO] [-I INODE_SIZE] [-m RESERVED_PERCENT] [-L LABEL] BLOCKDEV [KBYTES]

        -b BLK_SIZE     Block size, bytes
        -F              Force
        -i RATIO        Max number of files is filesystem_size / RATIO
        -I BYTES        Inode size (min 128)
        -L LBL          Volume label
        -m PERCENT      Percent of blocks to reserve for admin
        -n              Dry run
# mke2fs -L 'root' /dev/mmcblk2p2 
Filesystem label=root[  727.997914] random: mke2fs: uninitialized urandom read (16 bytes read)

OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (l[  728.006343] random: mke2fs: uninitialized urandom read (16 bytes read)
og=0)
29040 inodes, 115955 blocks
5797 blocks (5%) reserved for the super user
First data block=1
Maximum filesystem blocks=262144
15 block groups
8192 blocks per group, 8192 fragments per group
1936 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729
[  729.292446] random: crng init done
# 

5.3挂载烧录
在开发班上

# modprobe g_mass_storage file=/dev/mmcblk2 removable=1
[  744.235652] Mass Storage Function, version: 2009/09/11
[  744.240814] LUN: removable file: (no medium)
[  744.245441] LUN: removable file: /dev/mmcblk2
[  744.249800] Number of LUNs=1
[  744.275659] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
[  744.282638] g_mass_storage gadget: userspace failed to provide iSerialNumber
[  744.289816] g_mass_storage gadget: g_mass_storage ready
# [  744.787406] g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage

这是时候就能看到ubuntu下能够挂出两个盘 boot 与root
在ubuntun电脑上

$ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdc bs=1k seek=8
记录了408+1 的读入
记录了408+1 的写出
418642 bytes (419 kB, 409 KiB) copied, 0.0421526 s, 9.9 MB/s
$ cp zImage sun8i-s3-hqembed.dtb /media/pc189/boot/
$ sudo tar xvf rootfs.tar  -C /media/pc189/root/

注意这里的u-boot-sunxi-with-spl.bin为重新编译的bootcmd为使用mmc,bootargs挂载/dev/mmcblk2p2为root 的uboot

至此烧完重启设备正常

离线

#19 2020-03-12 17:37:31

k455619
会员
注册时间: 2018-07-29
累计积分: 148

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

学习了!!牛逼

离线

#20 2020-03-12 18:16:39

晕哥
管理员
注册时间: 2017-09-06
累计积分: 9,190

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

离线

#21 2020-06-06 15:11:37

p846603105
会员
注册时间: 2020-06-06
累计积分: 3

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

如果贴片式的sd卡有uboot了,还能用这个办法吗

离线

#22 2020-06-06 15:18:22

哇酷小二
管理员
注册时间: 2020-04-22
累计积分: 1,851

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

p846603105 说:

如果贴片式的sd卡有uboot了,还能用这个办法吗

可以,看这个帖子: https://whycan.cn/t_2449.html

离线

#23 2020-06-19 00:22:42

forcaowu
会员
注册时间: 2020-06-17
累计积分: 0

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

感谢分享,收藏一下先

离线

#24 2020-07-02 18:25:30

gxp
会员
注册时间: 2020-07-02
累计积分: 3

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

fel下载速度怎么亲,好像很慢啊

离线

#25 2020-09-12 22:04:22

shawn.d
会员
注册时间: 2020-09-12
累计积分: 100

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

收藏一下,明天板子到试试

离线

#26 2020-09-27 19:59:30

我思故我在
会员
注册时间: 2019-09-03
累计积分: 239

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

裸奔测试程序: v3s_s3_fel_autorun_linux_uart2_pb0_pb0_0x41000000.zip

双击 run_0x41000000.bat usb fel 即可运行裸奔程序 v3s_0x41000000.bin, 串口 uart2 (PB0/PB1) 有输出.

离线

#27 2020-10-18 15:57:32

addoo
会员
注册时间: 2020-10-18
累计积分: 1

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

晕哥 说:

这个帖子我反复操作实践了很长时间才搞定, 现在大大方便了Linux kernel/dtb/rootfs/app 的调试
这个帖子我反复操作实践了很长时间才搞定, 现在大大方便了Linux kernel/dtb/rootfs/app 的调试
这个帖子我反复操作实践了很长时间才搞定, 现在大大方便了Linux kernel/dtb/rootfs/app 的调试
......



Hello,
I cannot access the uploaded file. Please post the contents of boot_fel_initrd.cmd file here. Thanks!

离线

#28 2020-11-11 16:13:39

b7376811
会员
注册时间: 2019-09-12
累计积分: 17

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

厉害

离线

#29 2020-11-11 20:30:26

笨企鹅
会员
注册时间: 2019-10-28
累计积分: 22

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

收藏留印

离线

#30 2020-11-26 12:23:34

angelsan
会员
注册时间: 2020-04-02
累计积分: 82

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

太有用了,点赞点赞!

离线

#31 2020-11-26 22:02:41

angelsan
会员
注册时间: 2020-04-02
累计积分: 82

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

老大,用自己的 rootfs,不管是用您给的方法打包成 rootfs.cpio.gz.uimage,还是用上面网友提到的自动生成 rootfs.cpio.gz然后手动打包,都是 启动后出现 "Start kernel",然后就卡住了。

能不能提供一下 buildroot 的信息,比如版本和 .config文件等,谢谢!

晕哥 说:

离线

#32 2020-11-26 22:09:55

哇酷小二
管理员
注册时间: 2020-04-22
累计积分: 1,851

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

QQ截图20201126220820.png

勾选这个就应该可以了, 你可以试一试, 行不行都回一下.

离线

#33 2020-11-27 10:21:30

angelsan
会员
注册时间: 2020-04-02
累计积分: 82

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

试过,不行。这个选项可以自动生成 rootfs.cpio和 rootfs.cpio.gz(选 gzip压缩时)

哇酷小二 说:

https://whycan.com/files/members/3907/QQ截图20201126220820.png

勾选这个就应该可以了, 你可以试一试, 行不行都回一下.

最近编辑记录 angelsan (2020-11-27 10:28:10)

离线

#34 2020-11-27 10:52:24

angelsan
会员
注册时间: 2020-04-02
累计积分: 82

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

U-Boot 2017.01-rc2-00057-g32ab180-dirty (Nov 26 2020 - 21:09:42 +0800) Allwinner Technology

CPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
Card did not respond to voltage select!
*** Warning - MMC init failed, using default environment

Setting up a 1024x600 lcd console (overscan 0x0)
dotclock: 51000kHz = 51000kHz: (1 * 3MHz * 102) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000


U-Boot 2017.01-rc2-00057-g32ab180-dirty (Nov 26 2020 - 21:09:42 +0800) Allwinner Technology

CPU:   Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
Card did not respond to voltage select!
*** Warning - MMC init failed, using default environment

Setting up a 1024x600 lcd console (overscan 0x0)
dotclock: 51000kHz = 51000kHz: (1 * 3MHz * 102) / 6
In:    serial@01c28000
Out:   serial@01c28000
Err:   serial@01c28000
Net:   No ethernet found.
starting USB...
No controllers found
(FEL boot)
## Executing script at 41900000
## Loading init Ramdisk from Legacy Image at 41a00000 ...
   Image Name:   uInitrd
   Image Type:   ARM Linux RAMDisk Image (uncompressed)
   Data Size:    17998595 Bytes = 17.2 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 41800000
   Booting using the fdt blob at 0x41800000
   Loading Ramdisk to 41cd5000, end 42dff303 ... OK
   Loading Device Tree to 41ccf000, end 41cd4e4f ... OK

Starting kernel ...

离线

#35 2020-11-27 11:03:11

哇酷小二
管理员
注册时间: 2020-04-22
累计积分: 1,851

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

这就尴尬了,文件有多大?

离线

#36 2020-11-27 11:25:09

angelsan
会员
注册时间: 2020-04-02
累计积分: 82

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

rootfs.cpio.gz.uImage 是18M的样子,用过几个,都不行。比如“入坑指南”里面的 2017.08,“一键生成 spi-nor,自动启动 AnalogClock”里面的 2018.08,几个版本都一样,都是 Starting Kernel,然后就没有了。
老大,您那个rootfs是哪个版本的?

哇酷小二 说:

这就尴尬了,文件有多大?

离线

#37 2020-11-27 11:29:26

哇酷小二
管理员
注册时间: 2020-04-22
累计积分: 1,851

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

和buildroot版本没有关系, 应该是尺寸和文件格式问题。

angelsan 说:

rootfs.cpio.gz.uImage 是18M的样子,用过几个,都不行。比如“入坑指南”里面的 2017.08,“一键生成 spi-nor,自动启动 AnalogClock”里面的 2018.08,几个版本都一样,都是 Starting Kernel,然后就没有了。
老大,您那个rootfs是哪个版本的?

哇酷小二 说:

这就尴尬了,文件有多大?

离线

#38 2020-11-27 12:01:26

angelsan
会员
注册时间: 2020-04-02
累计积分: 82

Re: 荔枝派zero/小智极客S3/V3s使用sunxi-fel 借 u-boot 启动 Linux系统, 无需 spi flash / TF 卡

确认,是大小的问题。不要 qt5,10M的样子,可以启动,只是会出别的错

[    1.976157] Freeing unused kernel memory: 1024K
Starting logging: OK
Starting network: OK
getty: can't open '/dev/null': No such file or directory
getty: can't open '/dev/null': No such file or directory
getty: can't open '/dev/null': No such file or directory

哇酷小二 说:

和buildroot版本没有关系, 应该是尺寸和文件格式问题。

angelsan 说:

rootfs.cpio.gz.uImage 是18M的样子,用过几个,都不行。比如“入坑指南”里面的 2017.08,“一键生成 spi-nor,自动启动 AnalogClock”里面的 2018.08,几个版本都一样,都是 Starting Kernel,然后就没有了。
老大,您那个rootfs是哪个版本的?

哇酷小二 说:

这就尴尬了,文件有多大?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB