海思客制化分区及根文件系统

分区及其大小可以在bootargs里面指定,比如我们128M的spi nand falsh的分区及其大小

1M(boot),3M(kernel),24M(rootfs),4M(config),32M(user),4M(ini),12M(log),48M(upgrade)

bootargs=mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1M(boot),3M(kernel),24M(rootfs),4M(config),32M(user),4M(ini),12M(log),48M(upgrade)
bootcmd=nand read 0x82000000 0x100000 0x300000;bootm 0x82000000

在osdrv下的Makefile中有制作jffs2、yaffs2等根文件系统镜像的制作方法

hirootfs_build: hirootfs_prepare hibusybox hiboardtools  hipctools hirootfs_notools_build
hirootfs_notools_build:
	@echo "---------task [7] build rootfs"
	chmod 777 $(OSDRV_DIR)/pub/bin/$(PUB_BOARD)/*
	chmod 777 $(OSDRV_DIR)/pub/bin/pc/*
	rm $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/dev/* -rf
	pushd $(OSDRV_DIR)/pub/$(PUB_ROOTFS);ln -s sbin/init init;popd

ifeq ($(BOOT_MEDIA),spi)
	pushd $(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x40000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_256K);popd
	pushd $(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x20000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_128K);popd
	pushd $(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/$(PUB_ROOTFS) -l -e 0x10000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(JFFS2_IMAGE_BIN_64K);popd

	cp $(OSDRV_DIR)/tools/pc/ubi_sh/mkubiimg.sh $(OSDRV_DIR)/pub/$(PUB_IMAGE)
	chmod +x $(OSDRV_DIR)/pub/$(PUB_IMAGE)/mkubiimg.sh
	# build the pagesize = 2k, blocksize = 128k, part_size = 32M #
	pushd $(OSDRV_DIR)/pub/$(PUB_IMAGE);./mkubiimg.sh $(CHIP) 2k 128k $(OSDRV_DIR)/pub/$(PUB_ROOTFS) 32M $(OSDRV_DIR)/pub/bin/pc;popd
	# build the pagesize = 4k, blocksize = 256k, part_size = 50M #
	pushd $(OSDRV_DIR)/pub/$(PUB_IMAGE);./mkubiimg.sh $(CHIP) 4k 256k $(OSDRV_DIR)/pub/$(PUB_ROOTFS) 50M $(OSDRV_DIR)/pub/bin/pc;popd
	rm $(OSDRV_DIR)/pub/$(PUB_IMAGE)/mkubiimg.sh
endif
ifeq ($(BOOT_MEDIA),emmc)
	pushd $(OSDRV_DIR)/pub/bin/pc;./$(EXT4_TOOL) -l 96M -s $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(EXT4_IMAGE_BIN) $(OSDRV_DIR)/pub/$(PUB_ROOTFS);popd
endif
ifeq ($(BOOT_MEDIA),spi)
	pushd $(OSDRV_DIR)/pub/bin/pc;./$(YAFFS_TOOL) $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/ $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(YAFFS2_IMAGE_BIN_2K_4BIT) 1 2;popd
	chmod 644 $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(YAFFS2_IMAGE_BIN_2K_4BIT)
	pushd $(OSDRV_DIR)/pub/bin/pc;./$(YAFFS_TOOL) $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/ $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(YAFFS2_IMAGE_BIN_2K_24BIT) 1 4;popd
	chmod 644 $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(YAFFS2_IMAGE_BIN_2K_24BIT)
	pushd $(OSDRV_DIR)/pub/bin/pc;./$(YAFFS_TOOL) $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/ $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(YAFFS2_IMAGE_BIN_4K_4BIT) 2 2;popd
	chmod 644 $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(YAFFS2_IMAGE_BIN_4K_4BIT)
	pushd $(OSDRV_DIR)/pub/bin/pc;./$(YAFFS_TOOL) $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/ $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(YAFFS2_IMAGE_BIN_4K_24BIT) 2 4;popd
	chmod 644 $(OSDRV_DIR)/pub/$(PUB_IMAGE)/$(YAFFS2_IMAGE_BIN_4K_24BIT)
	find $(OSDRV_DIR)/pub/$(PUB_ROOTFS)/ -name '*svn' | xargs rm -rf
	pushd $(OSDRV_DIR)/pub;tar czf $(PUB_ROOTFS).tgz $(PUB_ROOTFS);rm $(PUB_ROOTFS) -rf;popd
#	pushd $(OSDRV_DIR)/pub;tar czf $(PUB_ROOTFS).tgz $(PUB_ROOTFS);popd
	@echo "---------finish osdrv work"

 

$(PUB_ROOTFS) 这个文件是busybox基础上,拷贝了一些hisi的runtimming lib生成的,在第一次执行make的时候就会生成。然后你可以将上段代码修改一下

hirootfs_build: hirootfs_prepare  hirootfs_notools_build

然后执行:make BOOT_MEDIA=spi CHIP=hi3516dv300 hirootfs_build  ,可以直接去编译生成文件系统的镜像了。

 

如果需要制作分区的镜像,根据你的flash类型,选择你说需要的文件系统格式,制作分区的镜像即可。

比如,如果我选用的是spi nor flash,需要创建一个user分区的镜像,那么选择jssf2的文件系统

pushd $(OSDRV_DIR)/pub/bin/pc;./mkfs.jffs2 -d $(OSDRV_DIR)/pub/user -l -e 0x10000 -o $(OSDRV_DIR)/pub/$(PUB_IMAGE)/user.bin;popd

-d                                               文件系统镜像的源文件

-e, --eraseblock=SIZE                设定擦除块的大小为(默认: 64KiB)

-l, --little-endian                           指定使用小端格式

-o, --output=FILE                        指定輸出image檔案的文件名.(default: stdout)

在对应的分区的镜像生成后,烧录到对应地址的分区上,对应于bootargs上的分区,user分区是在/dev/mtdblock4上,开机的时候挂上此分区就行了

mount -t jffs2 /dev/mtdblock4 /mnt/user

查看各分区大小和挂载的情况

/#cat /proc/mtd

Creating 8 MTD partitions on "hinand":
0x000000000000-0x000000100000 : "boot"
0x000000100000-0x000000400000 : "kernel"
0x000000400000-0x000001c00000 : "rootfs"
0x000001c00000-0x000002000000 : "config"
0x000002000000-0x000004000000 : "user"
0x000004000000-0x000004400000 : "ini"
0x000004400000-0x000005000000 : "log"
0x000005000000-0x000008000000 : "upgrade"

/ # mount
rootfs on / type rootfs (rw)
/dev/root on / type yaffs2 (rw,relatime)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
/dev/mtdblock4 on /mnt/user type yaffs2 (rw,relatime)
/dev/mtdblock5 on /mnt/ini type yaffs2 (rw,relatime)
/dev/mtdblock6 on /mnt/log type yaffs2 (rw,relatime)
/dev/mtdblock7 on /mnt/upgrade type yaffs2 (rw,relatime)
/dev/shm/ on /tmp type tmpfs (rw,relatime)
/dev/mtdblock3 on /jb_config/jb_rootfs type yaffs2 (rw,relatime)
/dev/root on /data/image type yaffs2 (rw,relatime)
/dev/mtdblock6 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
海思是一家专注于芯片开发的公司,海思的芯片在各个领域有很好的应用。而exFAT(Extended File Allocation Table)是一种Microsoft开发的文件系统,它在处理大型存储设备时具有较高的性能和存储容量优势。下面是关于在海思芯片上编译exFAT文件系统的回答。 首先,要在海思芯片上编译exFAT文件系统,我们需要安装适当的开发工具和环境。这些工具可以从海思官方网站上下载到。通常,我们需要安装交叉编译工具链,以便在主机上编译适用于海思芯片的代码。 其次,我们需要获取exFAT文件系统源代码。由于exFAT是Microsoft的专有技术,源代码可能不是开源的,但可以通过购买授权的方式获取。一旦获得了源代码,我们可以将其放入适当的目录中,以备后续编译使用。 接下来,我们可以使用交叉编译工具链中的编译器和相关工具,将exFAT源代码编译成适用于海思芯片的可执行文件。在编译过程中,我们需要注意指定正确的目标平台和相关的编译选项,以确保编译结果能在海思芯片上正确运行。 最后,完成编译后,我们可以将生成的可执行文件烧录到海思芯片中,并进行相应的测试和验证。在测试过程中,我们可以使用自己编写的测试代码和一些标准测试工具,验证exFAT文件系统海思芯片上的功能和性能。 总之,要在海思芯片上编译exFAT文件系统,我们需要安装适当的开发工具和环境,获取exFAT文件系统的源代码,使用交叉编译工具链进行编译,并最终将可执行文件烧录到海思芯片中进行测试和验证。这样,我们就可以在海思芯片上使用exFAT文件系统了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值