这次遇到问题真心静下来去仔细看了一下sd卡的脚本,主要是遇到sd卡制作的文件系统可以正常启动,但是挂载nfs系统却不能正常工作,一些模块不能正常加载。
归于原因,主要定位于sd卡脚本都文件系统做了很大的修改,接下去会分析到。毕竟这个DVSDK都是用到EVM板子上的,所以出现这个很正常。DVSDK自己带的setup-targetfs-nfs.sh脚本,只是完成了自带文件系统的解压,没有将DVSDK最新编译出来的模块加入到NFS文件系统中去。
先来看sd卡启动直接文件系统的脚本核心如下:
execute "mkdir -p /tmp/sdk/$$" execute "mount ${device}2 /tmp/sdk/$$" echo "Extracting filesystem on ${device}2 ..." rootfs=`ls -1 $sdkdir/filesystem/dvsdk*rootfs.tar.gz` execute "tar zxf $rootfs -C /tmp/sdk/$$" sync # check if we need to create symbolic link for matrix to auto start echo -n "Creating matrix-gui-e symbolic link..." if [ -f /tmp/sdk/$$/etc/init.d/matrix-gui-e ]; then if [ -h /tmp/sdk/$$/etc/rc3.d/*matrix* ]; then echo " (skipped) " else ln -s ../init.d/matrix-gui-e /tmp/sdk/$$/etc/rc3.d/S99matrix-gui-e ln -s ../init.d/matrix-gui-e /tmp/sdk/$$/etc/rc5.d/S99matrix-gui-e echo "done" fi fi sync echo "unmounting ${device}2" execute "umount /tmp/sdk/$$" if [ "$pc2" != "" ]; then echo "Copying $copy on ${device}3 ..." execute "mount ${device}3 /tmp/sdk/$$" execute "cp -ar $copy /tmp/sdk/$$" execute "cp $sdkdir/bin/setup.htm /tmp/sdk/$$" execute "cp $sdkdir/bin/top_omap35x_evm.png /tmp/sdk/$$/" execute "cp $sdkdir/docs/TMS320DM3730_EVM_Quick_Start_Guide.pdf /tmp/sdk/$$/quickstartguide.pdf" sync echo "unmounting ${device}3" execute "umount /tmp/sdk/$$" fi execute "rm -rf /tmp/sdk/$$" echo "completed!" echo "Updating FS with modified beagleboard-xM files" execute "mkdir -p /tmp/sdk/$$" execute "mount ${device}2 /tmp/sdk/$$" execute "cp $sdkdir/psp/asound.state.beagle /tmp/sdk/$$/etc/asound.state" execute "sed -i -e s:ttyO0:ttyO2:g /tmp/sdk/$$/etc/inittab" execute "sed -i -e s:usb0:usb1:g /tmp/sdk/$$/etc/network/interfaces" execute "sed -i -e s:eth0:usb0:g /tmp/sdk/$$/etc/network/interfaces" execute "sed -i -e s:dm37x-evm:beagleboard-dvsdk:g /tmp/sdk/$$/etc/hostname" execute "pushd $sdkdir" execute "cp Rules.make Rules.make.sdbak" echo EXEC_DIR=/tmp/sdk/$$ >> Rules.make execute "make depmod_install" execute "cp Rules.make.sdbak Rules.make" execute "popd" sync echo "unmounting ${device}2" execute "umount /tmp/sdk/$$" echo "Done"
可以总结出核心命令在于以下几句命令行:
ln -s ../init.d/matrix-gui-e /tmp/sdk/$$/etc/rc3.d/S99matrix-gui-eln -s ../init.d/matrix-gui-e /tmp/sdk/$$/etc/rc5.d/S99matrix-gui-e execute "cp Rules.make Rules.make.sdbak" echo EXEC_DIR=/tmp/sdk/$$ >> Rules.make execute "make depmod_install" execute "cp Rules.make.sdbak Rules.make"这里可以看到首先是完成对DVSDK自带文件系统的解压,然后是对图形界面的启动做软连接,最后的几句比较关键,主要执行make depmod_install命令 我们回到DVSDK的Makefile中去。可以看到如下depmod_install的依赖性关系:
name="code" class="plain">depmod_install: install cp -a $(EXEC_DIR)/opt/gfxlibraries/gfx_rel_es5.x/*.ko $(EXEC_DIR)/lib/modules/$(KERNEL_VERSION)/kernel depmod -a -b $(EXEC_DIR) $(KERNEL_VERSION) sed -i $(EXEC_DIR)/lib/modules/$(KERNEL_VERSION)/modules.dep -e s:kernel:/lib/modules/$(KERNEL_VERSION)/kernel:g这里可以看到,执行这个目标是,会先查看install这个依赖文件,intall这里会完成如下的依赖文件
linux_install opengldemos_install cmem_install sdma_install ceexamples_install codecs_install lpm_install dsplink_install u-boot_install dmai_install demos_install psp_examples_install c6accel_install xload_install c6run_install matrix_install gstreamer_ti_install loadmodule_install dvtb_install至此可以发现,这里会将最新编译出来的各种驱动模块,库函数安装到NFS文件系统中去。