-
第一步,先安裝對應的 PDK 包,並編譯出相對應的kernel module。
-
我是在 PDK 3.0 上面進行開發的,所以要先把相對應的 PDK包。
下載地址:
http://software-dl.ti.com/processor-sdk-linux/esd/AM335X/03_03_00_04/index_FDS.html
sbc_7109_454_pdk3@aplex:~/ti_sdk$ tree -L 1
.
├── bin
├── board-support
├── docs
├── example-applications
├── filesystem
├── linux-devkit
├── Makefile
├── Rules.make
├── setup.sh
export PATH=$PATH:/home/sbc_7109_454_pdk3/aplex/linux-devkit/compiler/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
-
進入SGX 驅動目錄, 並編輯一個 Makefile
cd ti_sdk/board-support/extra-drivers/ti-sgx-ddk-km-1.14.3699939
sbc_7109_454_pdk3@aplex:~/ti_sdk/board-support/extra-drivers/ti-sgx-ddk-km-1.14.3699939$ cat Makefile
export LINUXKERNEL_INSTALL_DIR=/home/sbc_7109_454_pdk3/aplex/board-support/linux-kernel-source-code/kernel_4.4.12
export SDK_PATH_TARGET=/home/sbc_7109_454_pdk3/ti_sdk/linux-devkit/sysroots/armv7ahf-neon-linux-gnueabi
#export DESTDIR=/home/sbc_7109_454_pdk3/test/qt5_rootfs
export DESTDIR=/home/sbc_7109_454_pdk3/test/root_test
all:
make -C ./eurasia_km/eurasiacon/build/linux2/omap_linux \
ARCH=arm TARGET_PRODUCT=ti335x KERNELDIR=$(LINUXKERNEL_INSTALL_DIR)
clean:
make -C ./eurasia_km/eurasiacon/build/linux2/omap_linux \
ARCH=arm TARGET_PRODUCT=ti335x KERNELDIR=$(LINUXKERNEL_INSTALL_DIR) clean
install:
cd ./eurasia_km/eurasiacon/binary2_omap_linux_release/target/kbuild; \
make -C $(LINUXKERNEL_INSTALL_DIR) SUBDIRS=`pwd` INSTALL_MOD_PATH=$(DESTDIR) PREFIX=$(SDK_PATH_TARGET) INSTALL_MOD_STRIP=1 modules_install
// 上面這個 Makefile 主要是指定了特定的環境變量,這些環境變量可以在 ./eurasia_km/eurasiacon/build/linux2/omap_linux 查到。
// 他目標生成在 /home/sbc_7109_454_pdk3/test/root_test, 主要就是兩個 .ko 文件。
// 去目標文件系統看一下
cd ~/test/root_test/
sbc_7109_454_pdk3@aplex:~/test/root_test$ ls
bin etc lib usr
sbc_7109_454_pdk3@aplex:~/test/root_test$ tree
.
├── bin
├── etc
│ └── init.d
├── lib
│ └── modules
│ └── 4.4.12-gfc3bcb0-dirty
│ ├── extra
│ │ ├── bc_example.ko
│ │ └── pvrsrvkm.ko
│ ├── modules.alias
│ ├── modules.alias.bin
│ ├── modules.ccwmap
│ ├── modules.dep
│ ├── modules.dep.bin
│ ├── modules.devname
│ ├── modules.ieee1394map
│ ├── modules.inputmap
│ ├── modules.isapnpmap
│ ├── modules.ofmap
│ ├── modules.pcimap
│ ├── modules.seriomap
│ ├── modules.softdep
│ ├── modules.symbols
│ ├── modules.symbols.bin
│ └── modules.usbmap
└── usr
├── bin
├── lib
└── sbin
11 directories, 18 files
// 這里,我們將 lib/modules 復制到你的文件系統里面, 這樣,第一步就完成了。
// 大體上,很多的工具都可以在 ti PDK 的filesystem 里面找到,如果找不到就在 ti_sdk/linux-devkit/sysroots/armv7ahf-neon-linux-gnueabi 里面
// 先復制兩個東西到你的文件系統里面:
cd ~/ti_sdk/filesystem/my_rootfs/
// 上面這個文件夾是我加壓的 TI 提供的那個超大的文件系統。
sudo cp etc/init.d/rc.pvr ~/test/rootfs_chen_last/etc/init.d/ -rf
sudo cp usr/bin/pvrsrvctl ~/test/rootfs_chen_last/usr/bin/ -rf
// 復制這兩個到自己的文件系統內
// 然后將自己的文件系統放在 板子 里面去運行
/etc/init.d/rc.pvr start
// 這時候會提示很多東西,最多的是缺少什么什么動態庫
// 這時候回到 TI 那個很大的文件系統內
cd usr/lib
sudo cp libwayland-* libattr.* libGLES* gbm/ libpvr* libdrm* libgbm.* libudev.* libsrv_* libEGL.* libIMGegl* libdbm* libglslcompiler* libpthread* libusc.so* ~/test/qt5_rootfs/usr/lib -rf
cd ../..
sudo cp lib/libudev.* ~/test/rootfs_chen_last/lib -rf
sudo cp usr/bin/modetest usr/bin/kms* ~/test/qt5_rootfs/usr/bin/ -rf
sudo cp lib/libattr.* ~/test/qt5_rootfs/lib -rf
// 大致將所有的庫都復制過去,然后再 /etc/init.d/rc.pvr start
// 如果上面這個能正常運行,然后再運行
kmscube
// 然后有可能會發現還有一個動態庫加載不了,但是你明明已經拷貝了這個動態庫
// 進入 ti 的很大的文件系統里面
arm-linux-gnueabihf-objdump usr/lib/libglslcompiler.so -p
// 查看 NEED 需要什么庫,將這些庫也復制進去
// 移植成功的標志就是 kmscube 能運行並打開一個立方體。