中级会员
- 积分
- 282
- 金钱
- 282
- 注册时间
- 2012-9-13
- 在线时间
- 32 小时
|
开发模式
在ubuntu下单独开发mpsoc-p5的linux内核驱动,然后使用 mkimage工具配合its文件,生成了带设备树的内核镜像文件 image.ub,然后tftpboot 单独更新 image.ub文件并启动运行。
按照上面的开发模式操作ps侧的资源,做内核部分实验等都没有问题。
但是最近在linux下添加了一个i2c设备,i2c的管教配置为EMIO. 理论上需要更新BOOT.BIN文件 跟新bitstream 才能正确输出i2c的信号。
我遇到的问题是
按照常规开发,设备树里添加对应设备,内核里驱动文件编译进入且compatible属性和设备树里的属性相同,这样驱动和设备就能匹配上,内核里面的驱动文件的probe就会执行。按照这个思路
我反复检查了代码,确认了设备树添加是正确的,内核里的驱动文件也编译了。 但是在 /sys/bus/i2c/devices的设备文件里就是 没有文件。 kernel的启动日子里也没有probe的打印。 感觉很奇怪。
后来更新了 BOOT.BIN 文件后, 用同样的 image.ub 文件在 /sys/bus/i2c/devices 出现了设备文件,probe也有打印。
太奇怪了。
我的疑问是更新BOOT.BIN文件 会顺带更新bitstream,也就是fpga 硬件资源会被重新配置。这个文件不更新,pl的管脚无法正确输出。 但是内核原有的运行逻辑是不会变得,
也就是没BOOT.BIN文件,/sys/bus/i2c/devices 里也应该有设备文件,只是 应用层代码open这个设备时读写无效。 现在是不更新BOOT.BIN文件。/sys/bus/i2c/devices 里设备文件都没有,不会probe. 这是为什么呢?
到底那个阶段影响了内核的启动过程
|
|