NUC972 作为一个低成本linux方案,有片内SDRAM,又有茫茫多的外设,简直工控神U.

为了追究更低成本,考虑放弃使用NAND,把uboot, 内核,文件系统都放在SPI FLASH。这样画板面积就更小了,更灵活。下面就简要记录一下修改和编译的过程。

一.Uboot修改编译

新塘官方有提供SPI下的Uboot配置文件nuc970_evb.h,这里没做修改,直接用。放到uboot目录下的include\configs中,然后执行make nuc970_nonand_config。为何是nuc970_nonand_config,看下Uboot的Makefile就明白了。

######################################################################
#nuc970
######################################################################
nuc970_nand_config  \
nuc970_config:     unconfig@mkdir -p $(obj)include $(obj)board/nuvoton/nuc970evb@mkdir -p $(obj)nand_spl/board/nuvoton/nuc970evb@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk@echo "RAM_TEXT = 0xE00000" >> $(obj)board/nuvoton/nuc970evb/config.tmp@$(MKCONFIG) nuc970_evb arm arm926ejs nuc970evb nuvoton nuc970@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mknuc970_nonand_config:     unconfig@mkdir -p $(obj)include $(obj)board/nuvoton/nuc970evb@echo "RAM_TEXT = 0xE00000" >> $(obj)board/nuvoton/nuc970evb/config.tmp@$(MKCONFIG) nuc970_evb arm arm926ejs nuc970evb nuvoton nuc970

注意,这里也定义了Uboot的链接地址RAM_TEXT = 0xE00000。
另外注意还有1个需要关注的参数,nuc970_evb.h中定义的的uboot环境变量的地址

#define CONFIG_ENV_OFFSET       0x80000

配置好后,直接make all -j4,生成uboot.bin。

二.内核修改

主要的要修改的配置有:
1.打开SPI接口配置

2.MTD配置
3.文件系统配置,我使用了cramfs和squashfs。

4.如果是使用的w25q128,最好修改linux-3.10.x/drivers/mtd/devices/m25p80.c驱动文件,把erasesize 改64K。

//   { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256,  SECT_4K | M25P80_DUAL_READ | M25P80_QUAD_READ | M25P80_QUAD_WRITE) },{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256,  M25P80_DUAL_READ | M25P80_QUAD_READ | M25P80_QUAD_WRITE) },

三.修改Uboot环境变量

nuc972支持直接下载.txt的环境变量文件。打开env.txt,修改2个参数
1.bootcmd=sf probe 0 18000000; sf read 0x7fc0 0x200000 0x220000; bootm 0x7fc0。 sf read的size必须大于内核uImage镜像的大小,可以多读,不可以少。
2. bootargs=noinitrd root=/dev/mtdblock1 rw rootfstype=cramfs console=ttyS0,115200n8 rdinit=/sbin/init mem=64M。默认分区表配置下,无Nand时候,SPI的第2个分区映射到了/dev/mtdblock1。有Nand情况则应该是root=/dev/mtdblock4

//env.txt
bootcmd=sf probe 0 18000000\; sf read 0x7fc0 0x200000 0x220000\; bootm 0x7fc0
bootargs=noinitrd root=/dev/mtdblock1 rw rootfstype=cramfs console=ttyS0,115200n8 rdinit=/sbin/init mem=64M
baudrate=115200
bootdelay=3
ethact=emac
ethaddr=00:00:00:11:66:88
stderr=serial
stdin=serial
stdout=serial

四.文件系统生成

cramfs: 用bulidroot生成cramfs,过程略 。建议还是用cramfs这些只读文件系统,有需要写配置文件再单独分区,直接操作spi。不然开机速度蛋疼。
也可以打包成jffs2 : mkfs.jffs2 -e 0x10000 -d rootfs/ -o jffs2.img

五.终于搞完了,开始烧写

烧写工具:对我这样的新手还是很友好。

对应的地址/偏移地址,等熟悉了再自己规划下分区,最好还得加个OTA。

文件 image type off/addr
uboot.bin uboot 0xE0000
env.txt bin Environment 0x80000
uImage data 0x200000
rootfs data 0x800000

烧写完成后,上电,linux系统加载正常。收工睡觉。

nuc970-spi0 nuc970-spi0: master is unqueued, this is deprecated
0x000000000000-0x000000800000 : "kernel"
0x000000800000-0x000001000000 : "rootfs"
libphy: nuc970_rmii0: probed
TCP: cubic registered
NET: Registered protocol family 17
VFS: Mounted root (cramfs filesystem) readonly on device 31:1.
devtmpfs: mounted
Freeing unused kernel memory: 116K (c02ff000 - c031c000)Please press Enter to activate this console. Processing /etc/profile... Done/ #
/ #
/ # du -sh
2.0M    .
/ #
/ # uname -a
Linux (none) 3.10.101 #1 PREEMPT Thu Jun 20 07:58:05 PDT 2019 armv5tejl GNU/Linux

NUC972 SPI Flash启动+内核+Cramfs文件系统相关推荐

  1. ADSP-SC589开发板更换SPI FLASH并从flash引导内核与文件系统

    前情提要:目前本人正在用ADSP-SC589开发板做开发,希望实现内核与文件系统都从SPI FLASH启动,但板子上原来的SPI FLASH太小了,于是更换了镁光的MT25QU01GBBB FLASH ...

  2. AM335x SPI Flash启动说明

    本文主要描述如何在EVB335X-II上实现从SPI Flash启动系统,包括启动方式的修改,u-boot编译,SPI Flash的烧写.EVB335X-II使用的SPI Flash型号为W25Q32 ...

  3. 荔枝派Zero(V3s)SPI Flash 启动

    参考:http://zero.lichee.pro/系统开发/SPI_flash_build.html#linux 本文以型号为MX25L12805.MX25L25635F为例,flash大小分别为1 ...

  4. ZYNQ开机挂载SPI FLASH中的jffs2文件系统

    目录 写在前面 Vivado工程建立 petalinux工程建立 下载程序,开机测试 没成功的话看这里 写在前面   做类嵌入式开发很久了,从51到STM32,Arduino,ESP8266,ESP3 ...

  5. nuc972 配置成SPI nor flash 启动

    nuc972开发板用的是w25q128的spi nor flash (总共16M). 做了如下事情使得从nor flash启动,jffs2文件系统也放在nor flash上: sudo apt ins ...

  6. RT-Thread ART-Pi 外部SPI Flash分区挂载为U盘

    验证环境 Win10 64位 Keil MDK 5.30 ART-Pi 开发板:STM32H750XBH6开发板 工程:最小RT-Thread 系统,版本:RT-Thread v4.1.0 relea ...

  7. [转]i.MXRT1050 从外部QSPI Nor Flash启动

    晕,不看不知道一看吓一跳,都快两年没有更新我的博客了,哎,惭愧的同时也是感叹时间过的真快啊,之前写博客还高喊着自己快奔三的人了,结果现在都已经迈过去了...不继续说了,都暴露年龄了,咳咳.不过虽然时光 ...

  8. flash挂载到系统 spi_jffs2根文件系统挂载不上spi flash

    这几天一直在弄jffs2,让jffs2挂载到spi flash上,所以在内核中对spi flash进行了分区,给uboot了1M的空间,给kernel 4M的空间,给jffs2了11M的空间,因为我们 ...

  9. 基础——ARM系统的启动流程(boot loader,Linux 内核,文件系统之间的关系)

    以三星的四核处理器Exynos4412为例,该开发板属于armv7架构,contexA9系列,32bit,cpu4核心1.5GHZ主频,eMMC 大小型号为:KLM4G. ARM里面,启动MMU以后, ...

最新文章

  1. Docker registry
  2. JavaScript 工作原理(二)-如何在 V8 引擎中书写最优代码的 5 条小技巧(译)
  3. StringBuilder的toString方法
  4. 关于SAP Spartacus嵌套label的padding问题
  5. pursuit of happiness
  6. 用css样式画三角形(提示框三角形)
  7. ulua 动态反射在IOS上的问题
  8. Numpy统计计算、数组比较,看这篇就够了
  9. 蒙特卡洛树搜索_Query 理解和语义召回在知乎搜索中的应用
  10. 超级科学计算机bug,人类或生活在虚拟世界中,科学家发现三大宇宙BUG,让人细思极恐...
  11. qt实现类似everything搜索功能,速度没有everything那么快
  12. MFC做一个简易的登录界面
  13. mysql sasl_SASL认证失败的原因(authentication failed)
  14. python 基于Tkinter的姻缘测试器
  15. 基于nginx tomcat redis分布式web应用的session共享配置
  16. fatal remote does not appear to be a git repository
  17. FOC学习之路——硬件电路(一)
  18. 在html页面实时显示系统时间
  19. matlab的符号变量sym,syms
  20. 使用Gitee用于进行团队合作,(配合数据库迁移)

热门文章

  1. one + two = 3 数组(转载)
  2. c++ perror() 函数
  3. python调用函数必须带括号吗_Python笔记:调用函数,带扩号和和不带括号的区别...
  4. 心的旅行——2009西藏行之林芝(四)
  5. 【dbt】数据加工大师浅谈
  6. ios微信小程序下拉刷新怎么配_[wx]微信小程序自定义下拉刷新
  7. 大数据解决方案如何实施
  8. ​VRTK4.0使用总结(三)UI交互​
  9. 重磅!华为正式出售荣耀,不再持有任何股份
  10. 2022氟化工艺复训题库及模拟考试