fmql之linux入门

成功搭载ubuntu了,所以接下来要编写设备树了。

之后再运用外设。

设备树

【zynq和fmql的设备树编写方式、语法等是一样的吗】

设备树要修改system-user.dtsi文件,目录如下:

fmsh-psoc.dtsi中有很多外设的信息,但都是disable

对于要用到的外设,在system-user.dtsi中,把status改成"okay"即可。

ZYNQ-Linux开发之(五)Vivado工程搭建,设备树修改方法,复旦微电子fmql开发、vivado联合procise、IAR的linux系统开发-保姆级教程-非常详细_zynq linux-CSDN博客

https://www.cnblogs.com/han-guang-xue/p/16115559.html

pl.dtsi文件是和vivado工程对应的PL端资源:

详细说明:

关于ZYNQ搭载嵌入式操作系统_zynq phy挂载-CSDN博客

尝试修改

  • 为什么不能include fmsh-psoc.dtsi?(该文件是fmql的PS资源设备树配置)

引用之后:

(换成#include也不行)

难道要在system-user.dtsi里重新写一遍? ------不需要

或者直接在fmsh-psoc.dtsi里修改? ------不建议

  • 把fmsh-psoc.dtsi内容全cpoy到system-user.dtsi里,然后只把uart1的status改成okay。

(其实并不需要这样做)

PS端包括:(所需)global timer,gmac0,qspi flash0(内存可能需要修改),can0,uart0,uart1,SD,iic(模拟iic),watchdog,ttc0,

PL端包括:(可能全部需要自己写?)uart16550,bram,etc。

sysmon和intr呢?

---PL端也不需要自己写,都在pl.dtsi里面。

PL端dtsi生成:https://m.eeworld.com.cn/bbs_thread-1131007-1-1.html

那么问题来了,fmsh-psoc.dtsi里全部都是status = "disabled"

要修改system-user.dtsi还是直接修改fmsh-psoc.dtsi?

以及是否可以 /include/ "pl.dtsi"

(PL端的引脚配置需不需要?)

【以上内容是本人最开始接触设备树的想法,经过几天的信息收集,已经不这么想了】

gmac

修改mac地址:(前面加0x的话就会报错)

驱动程序

.h文件位置:

Linux驱动入门------编写第一个驱动_linux怎么写驱动-CSDN博客

设备树语法:

设备树文件的调用关系_dtsi文件-CSDN博客

i2c

模拟iic(官方有pdf教程)(看教程是很简单的事情,但是也花了我两三天时间)

.dtsi中添加以下内容:

cs 复制代码
// i2c - gpio
	i2c_gpio0: i2c-gpio-0{
		compatible = "i2c-gpio";
		/*MIO56-SDA, MIO55-SCL*/
		gpios = <&portc 2 0
			 &portc 1 0 >;
		status = "okay";
		i2c-gpio,delay-us = <5>; // 100k Hz
		#address-cells = <1>;
		#size-cells = <0>;

		rtc@68 {
			compatible = "nxp, ds3231";
			reg = <0x68>;	//ID
			status = "okay";
		}
	}

发现了,报错的原因是两个"}"后面都没有";"

kernel编译已经有了:

但是还是不行:

难道是kernel还没配置好?

看了一下官方pdf,用的是MIO48、49。而我们的电路板用的是MIO55、56,是EMIO了,所以是不是还要配置为EMIO?

看看怎么配置。

试试看:我使用过的Linux命令之hwclock - 查询和设置硬件时钟 - Bash @ Linux - ITeye博客

https://www.cnblogs.com/taosim/articles/3287490.html

iic:

Linux内核驱动:gpio模拟i2c驱动_i2c-gpio-CSDN博客

可行:
uboot使用软件i2c(IO模拟I2C)_mt7621的i2c-CSDN博客

但是每次断电启动后都需要再配置吗,还是以后就不需要了?

hwclock是否可用?

https://www.cnblogs.com/schips/p/xilinx_zynq_linux_config_rtc_with_dts.html

把.dtsi里面的rtc也改成"dallas,ds3231"试试:没用。

找linux源码目录下的.txt文件(绑定文档)

发现rtc的cpmoatible属性写错了,应该写"maxim,ds3231"而不是"nxp, ds3231"(中间不能有空格)

改了之后还是不行,发现kernel:

只有i2c-gpio,没有rtc

因为IO给的value是1,改成0:

可以了!(为什么是ds1307而不是ds3231?)

总结

1.修改设备树system-user.dtsi,切记勿修改fmsh-psoc.dtsi)

cpp 复制代码
/{
    i2c_gpio0: i2c-gpio-0 {
		#address-cells = <1>;
		#size-cells = <0>;

		compatible = "i2c-gpio";
		// MIO56-SDA, MIO55-SCL
		gpios = <&portc 2 0    
			     &portc 1 0 >;
		status = "okay";
		i2c-gpio,delay-us = <5>; // 100k Hz
			
		rtc@68 {
			compatible = "maxim,ds3231";
			reg = <0x68>;	//ID
			status = "okay";
		};
	};

};

i2c-gpio的引脚要和原理图对上;rtc的compatible要和内核文件信息对上(厂商和芯片型号) (中间不能有空格)

2.kernel 启动信息中是否有i2c-gpio和rtc的相关驱动信息

3.ubuntu启动 后,输入命令,设置时间

4. rtc芯片的compatible信息,找了好久都没有找到内核文件中正确的写法(因此才会写成dallas, ds3231中间还有空格---__---)

硬件信息在linux源码下:

gpio

root登录后:

cd /sys/class/gpio GPIO部分

ls -l 看看有哪些gpio,根据其地址判断引脚 (字幕为小写的L)

(目前没有AXI_GPIO)

也就是说,0xE0003000的MIO[0]为gpiochip480,一直到MIO[31]为gpiochip511。

bank地址

|------|-------------|-----------|
| Bank | addr | gpiochip |
| A | 0xE000_3000 | 480 - 511 |
| B | 0xE000_3100 | 458 - 479 |
| C | 0xE000_3200 | 426 - 457 |
| D | 0xE000_3400 | 394 - 425 |

命令

添加设备接口命令 echo num > /sys/class/gpio/export

num为gpiochip数字

删除设备接口命令 echo num > /sys/class/gpio/unexport

编辑gpio的信息:

cd /sys/class/gpio/gpionum (num仍未gpiochip数字,如500)

ls -l

u-boot下操作

在启动linux时随便按键盘上的某个键,就会进入u-boot下:

uart

qspi flash

cat /proc/mtd 查看qspi flash分区
hexdump -C -n 64 /dev/某个分区 读该分区,长度为64个字节
echo "写入flash的字符串内容"

ZYNQ-Linux开发之(七)国产化复旦微电子FMQL平台uboot和kernel无法识别国产SPI Flash 芯片以及分区的问题_复旦微fmql 社区-CSDN博客

phy

配置

ip:

因为linux设置与主机共享ip,所以看主机piv4的地址即可。

命令

root下输入:

ifconfig -a 查看系统中所有的网络设备

ifconfig 查看系统当前已激活(打开)的网络设备

能ping通电脑: (每次重启开发板都要再来一次)(u-boot下设置就不用)

但是开发板和ubuntu不能互ping通:

还是不太行。

看这个:Linux开发板网络直连电脑的设置方法_哔哩哔哩_bilibili

因为电脑没有禁止wifi。
还有一个原因是ubuntu的网络设置:

这样就可以ping通ubuntu了。

u-boot

ipaddr是开发板的ip;serverip是ubuntu(电脑中的linux系统,而不是开发板的系统)的ip

SD卡

以下为zynq命令。

以上只是ubuntu下通过shell命令对外设进行操作。

接下来要学怎么写驱动程序了。

相关推荐
木子Linux36 分钟前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.82442 分钟前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维44 分钟前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
watermelonoops1 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
滴水之功2 小时前
VMware OpenWrt怎么桥接模式联网
linux·openwrt
ldinvicible2 小时前
How to run Flutter on an Embedded Device
linux
YRr YRr3 小时前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
认真学习的小雅兰.3 小时前
如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
linux·ubuntu·docker
zhou周大哥3 小时前
linux 安装 ffmpeg 视频转换
linux·运维·服务器
不想起昵称9294 小时前
Linux SHELL脚本中的变量与运算
linux