今天得到一个任务,是在当前nvidia tx2平台上使能usb cdrom并且调试烧录功能。
首先测试给到的信息是不能在平台上使用(废话嘛,能用还用我干嘛)
拿到本地ubuntu机器上看了下,使用brasero等软件可以顺利烧录。
此时捕获了后台dmesg的log,还有就是dev下面针对usb光驱生成的节点,和/sys/bus/scsi下面的信息
将光驱插入到目标平台(tx2)发现没任何反应,光驱也不动,后台看到系统可以识别usb设备,然后就没了,和台式机linux相比,少了一些sr的log。
针对英伟达当前主板对应的jetpack版本,下载对应的bsp包,编译内核。
针对缺少的sr log,在英伟达内核中搜索,发现是sr.c文件没编译进去,此时找到对应的CONFIG宏并且打开。那么交叉编译出来了第一个模块sr_mod.ko
insmod 到tx2上,发现缺少符号,然后打开cdrom.ko对应的宏并编译之。
两个ko都加载了,顺带编译了sg.ko,udf.ko一并insmod进去了。此时插入光驱,光驱可以转动,但是提示说找不到对应的文件系统ISO9660.无法挂载。
好吧,在linux/fs目录下搜索,找到对应的宏,打开编译成模块,顺带打开了Kconfig里面的两个针对iso9660的参数。,这时候得到了isofs.ko。安装上发现文件系统没错了,但还是无法挂在,提示wrong fs type,bad option,bad superblock on 巴拉巴拉。dmesg没有log。咩办法,百度看下挂在程序是在/lib/usbfs2/xxxx目录下,并且还真有人遇到了这个问题,解决办法是系统要打开fsutf-8宏。并且先按照他说的命令,手动挂在可以成功,于是编译,得到了另一个模块nls_utf8.ko。
至此,系统可以正确读取已经烧录过的光盘了!!!!每一次看着都向胜利,最后来了一盆冷水!!!!!
此时测试烧录功能,什么,brasero没反应直接退出,oh,no,后台还jj的没log。肿么办,肿么办。
百度找一下其他的烧写调试方式把。找到了dvd+rw-mediainfo ,了解了烧录过和没被烧录光盘的信息不同。各种软件测试烧录。
最后:黄天不负有心有,终于找到了一个可以正常烧录的命令。
sudo growisofs -Z /dev/cdrom -R -J /home/mc/xxxx.txt
由于现在使用的dvd-R,只能写一次,所以测试的很少,因为测试一次,就废了一张盘,目前还有的问题就是上面的命令没办法写太大的文件(有可能并不是问题,只是测试方法不对而已)
不管怎样,目前有一个途径可以在系统中写入光盘,路已打通。后续慢慢优化调试即可。