中级会员 
   
	- 积分
 - 289
 
        - 金钱
 - 289 
 
       - 注册时间
 - 2012-9-13
 
      - 在线时间
 - 33 小时
 
 
 
 | 
 
开发模式 
在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.  这是为什么呢? 
到底那个阶段影响了内核的启动过程 
 
 |   
 
 
 
 |