调试at91-sama5d27遇到的一些问题(2)

本文接着上一篇文章叙述:https://blog.csdn.net/qq_44766222/article/details/124164895

项目场景:

基于sama5d27的嵌入式产品的软件开发,下面将描述一些我调试中遇到的一些问题,这个项目属于是我第一个linux应用项目,调试中遇到了一些小白性的问题,整体的调试思路为:分析源码-修改源码-编译源码-运行-分析源码。

问题1-flash芯片支持

同上文中提到的bootstrap遇到的问题类似,u-boot不支持我们项目上使用的flash。

问题解决

选择与激光器相匹配的SPI flash驱动,发现芯片型号与驱动里面的参数表不匹配,更改参数表,在u-boot编译选项中添加spi flash support 对测距机使用的flash的支持。
注:spiflash默认为20M,可以在spi_flash.h中修改spi总线的速率。

问题2-宏定义解释

相关宏定义的解释
#define CONFIG_SYS_TEXT_BASE 0x26f00000 :程序代码段存放于DDR中的起始地址

#define CONFIG_SYS_AT91_SLOW_CLOCK 32768 :ARM系统慢时钟

#define CONFIG_SYS_AT91_MAIN_CLOCK 24000000 : 使用的系统主时钟

问题3-u-boot

编译u-boot遇到的问题,编译提示 /bin/sh :1:bison:not found
编译出错

解决方法

解决方法:
sudo apt install bison
如果还有类似的问题出现,解决方法象相同

问题4-kernel不能启动

在编译kernel成功并移植到板卡运行时,又出现了启动异常的情况。

解决方法

查找到是由于开发板与我们使用的芯片版本不一样,在官网下载相应版本的内核驱动,编译后运行成功。

记录4-系统分区设置

主要注意在传入内核的boot参数要与设备树中spi分区参数一致,下面把我的参数贴上来参考:

下面是u-boot的BOOTARGS
#define CONFIG_BOOTARGS							\
	"console=ttyS0,115200 noinitrd earlyprintk "				\
"mtdparts=spi0.0:256k(bootstrap)ro,512k(uboot)ro,"		\
"256K(env),256k(env_redundent),256k(spare),"			\
	"512k(dtb),4M(kernel)ro,-(rootfs)rw "			\
	"root=/dev/mtdblock7 rootfstype=jffs2 atmel.pm_modes=upl0,upl1"
/* u-boot env in serial flash, by default is bus 0 and cs 0 */
/*read dtb from sf 0x180000 size 0x80000 to ddr 0x21000000 
  read zimage from sf 0x200000 size 0x384000 to ddr 0x22000000  
*/
#define CONFIG_ENV_IS_IN_SPI_FLASH
#define CONFIG_ENV_OFFSET		0xC0000
#define CONFIG_ENV_SIZE			0x20000
#define CONFIG_ENV_SECT_SIZE		0x20000
#define CONFIG_BOOTCOMMAND		"sf probe 0; "				\
					"sf read 0x21000000 0x180000 0x80000; "	\
					"sf read 0x22000000 0x200000 0x400000; "	\
					"bootz 0x22000000 - 0x21000000"

下面是kernel 设备树的分区参数
bootstrap@0 {
						label = "bootstrap";
						reg = <0x0 0x40000>;
					};
					uboot@40000 {
						label = "uboot";
						reg = <0x40000 0x80000>;
					};
					env@0xC0000 {
               					label = "env";
                				reg = <0xC0000 0x40000>;
            				};
            				env_redundent@0x100000 {
                				label = "env_redundent";
                				reg = <0x100000 0x40000>;
            				};
            				spare@0x140000 {
                				label = "spare";
                				reg = <0x140000 0x40000>;
            				};

					dtb@0x180000 {
                				label = "dtb";
                				reg = <0x180000 0x80000>;
            				};
            				kernel@200000 {
						label = "kernel";
						reg = <0x200000 0x0400000>;
					};
					rootfs@600000 {
						label = "rootfs";
						reg = <0x600000 0xA00000>;
					};

记录5-使能gpio唤醒系统

这款芯片支持低功耗的功能,同时支持通过外部中断使系统从低功耗模式中唤醒,这里我们需要用GPIO来唤醒系统需要在设备树中配置gpio作为唤醒源,具体添加代码如下:

pb5 {
			label = "USER";
			gpios = <&pioA PIN_PC12 GPIO_ACTIVE_LOW>;
			linux,code = <0x104>;
			wakeup-source;
			gpio-key,wakeup;
		};

记录6-使用spiflash

在用户空间使用spi,按照下面的步骤实现:
1、编译内核时,使用官方提供的驱动,选择Device Drivers > SPI support><> User mode SPI device driver support/<> Atmel SPI Controller;
2、修改设备树节点

spi1: spi@fc000000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_spi1_default>;
				status = "okay";
				spidev@0 {
					compatible = "rohm,dh2228fv";
					reg = <0>;
					spi-max-frequency = <11000000>;
				};
				spidev@1 {
					compatible = "rohm,dh2228fv";
					reg = <1>;
					spi-max-frequency = <11000000>;
				};
				spidev@2 {
					compatible = "rohm,dh2228fv";
					reg = <2>;
					spi-max-frequency = <11000000>;
				};
			};

3、这个时候就可以走文件系统dev目录下看到spix.y设备,这个时候便可使用对应的spi端口

记录7-添加jffs文件系统支持

本系统使用的flash为spi flash,建议使用的文件系统为jffs2,开发板提供的文件系统为ubifs,不能够很好的支持测距机使用的flash,按照下图修改内核配置,使支持jffs2文件系统:
在这里插入图片描述

问题8-编译设备树出现的问题

编译设备树出现dt-bindings/dma/at91.h:no such file or directory如下图:
在这里插入图片描述

解决方法

修改Makefile.lib文件,添加设备树查找头文件的目录:
在这里插入图片描述
在这里插入图片描述


大家有问题可以相互讨论,我也是小白,微信 yucaohua001

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值