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命令对外设进行操作。

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

相关推荐
白白♛~5 分钟前
网络管理之---3种网络模式配置
linux·服务器·网络
GOTXX9 分钟前
NAT、代理服务与内网穿透技术全解析
linux·网络·人工智能·计算机网络·智能路由器
脱了格子衬衫30 分钟前
使用源码编译安装 Tomcat
linux·tomcat
陈yanyu34 分钟前
Linux - 弯路系列3:安装和编译libvirt-4.5.0及虚拟网卡virbr0(virbr0-nic)创建
linux·运维·服务器
feng68_40 分钟前
Linux编辑/etc/fstab文件不当,不使用快照;进入救援模式
linux
码农研究僧1 小时前
详细分析ip addr show 查看网络配置的命令
linux·tcp/ip·ip addr show
码狂☆1 小时前
ubuntu连接orangepi-zero-2w桌面的几种方法
linux·ubuntu
学习向前冲1 小时前
安装一键式重置密码插件(Linux)-CloudResetPwdAgent
linux·运维·服务器
石兴稳2 小时前
Ceph client 写入osd 数据的两种方式librbd 和kernel rbd
linux·ceph
搬砖的小码农_Sky2 小时前
单片机和FPGA有什么区别?
单片机·嵌入式硬件·fpga开发