DAVINCI DM3730开发攻略——U-BOOT-2010.06的移植
說來慚愧,又很長時間沒更新文章了,本來這篇文章可以春節過來搞定的,結果春節回到公司,大客戶一直要求抓緊時間設計DM3730平臺的720P寬動態低照度相機產品,和另外兩款多網口的DM3730產品的樣機,南京老客戶也在催DM3730 3G工業級板子樣機,剛搞定兩個老客戶,又有兩個新客戶找我們設計DM3730新產品,一個是3G+WIFI 4CIF視頻分析產品,另一個客戶人臉識別車載方面的產品,整個桐燁科技都很忙。現在又不敢招人,畢竟冷酷的現實不得不面對:這個掌握無敵的宇宙真理國度經濟不斷下行,搞得第一季度我們也沒有什么大單子,畢竟給客戶做新樣機是沒什么錢賺的,都是培訓客戶。雖然現在是春天,但經濟的寒冬才來臨,通貨膨脹造成公司運營成本飛漲,總感覺很累,有時自己很想靜心鉆進本公司新產品的研發去,但是客戶那邊有些關鍵的軟件問題還得本人親自解決,累也得堅持下去。
上篇文章介紹DM3730的xloader的移植,這邊介紹DM3730第2 boot階段移植:u-boot-2010.06的移植,其實本人已經寫過DM6446、DM36X平臺UBOOT的文章,但是由于平臺和版本不一樣,所以這里單獨一篇,對有些人來說可能寫得比較膚淺,請不要見笑,目的是完善自己的DM3730開發攻略,讓有興趣在這方面開發的生手提供一點點幫助。這個u-boot-2010.06源碼存放的位置在《DAVINCIDM3730開發攻略——DVSDK4_03和雙核CODEC機制介紹.doc》已經介紹。下面我們開始DM3730進行u-boot-2010.06的移植工作。
一、裁剪和交叉編譯環境變量設置
? ?u-boot-2010.06-psp04.02.00.07.sdk改名u-boot-2010.06,簡潔;
? ?1、總的Makefile修改
? ?對u-boot-2010.06/Makefile進行修改,
? ?屏蔽第139和140行:
? ?# ? ? ?examples/standalone
? ?# ? ? ?examples/api
? ?然后把u-boot-2010.06/examples文件夾刪除掉,簡潔;
? ?第159行的修改為:
? ?CROSS_COMPILE = arm-arago-linux-gnueabi-
? ?這個就是DVSDK4——03自帶的交叉編譯工具,關于這個交叉編譯工具,TI做得很全面了,提供很 多免費的應用程序LIB等等。
? ?第244行修改為:
? ?#LIBS += api/libapi.a
? ?屏蔽,然后把u-boot-2010.06/api,簡潔,和項目不相關;
? 2、涉及到交叉編譯環境的u-boot-2010.06\arch\arm\config.mk第24行改為:
? CROSS_COMPILE =arm-arago-linux-gnueabi-
二:刪除多余文件夾
? ?這個DVSDK4_03自帶的u-boot-2010.06-psp04.02.00.07.sdk很占空間,也比較亂。很不便于開發和備份,我們就是要把68多M字節的變成20M字節簡化版(bz2或gz壓縮的一般才3.4M的大小)。
注意,下面介紹的有些目錄下是刪除文件夾,有些是刪除文件,不要搞混;
? ?1、刪除u-boot-2010.06/arch/除了arm文件夾外其他所有文件夾;
其他非arm平臺去掉,占空間,啰嗦。
? ?2、刪除u-boot-2010.06/arch/arm除arm_cortexa8外的其他所有文件夾;
DM3730屬于arm cortex-A8架構(前幾篇文章寫成COTEX-A8了,系本人簡寫錯誤,有時本人直接跟客戶就是ARM-A8的稱呼)。DM6446、DM6467、DM6467T、DM365、DM368都是比較差勁的ARM926EJS架構。
? ?3、刪除u-boot-2010.06/arch/arm/arm_cortexa8/除omap3文件外,刪除其他文件夾,
就是刪除mx51,s5pc1xx,ti81xx文件夾,DM3730/DM3725芯片屬于OMAP3平臺,這里邊還包括OMAP3530、2010年拿來做MOTO 智能手機的OMAP3630等芯片。
? ?4、保留u-boot-2010.06/arch/arm/include/asm/下面的三個文件夾:
arch-omap,arch-omap3,proc-armv,同這個目錄下的那些.h文件不要刪除,這一點要注意一下。
? ?5、刪除u-boot-2010.06/board/除ti外的其他所有文件夾;
? UBOOT版本越來越高,新的廠商的板子不斷加進去,很多,很煩,很占空間,對我們專注開發某個平臺不好,所以我們接把不相關的板子平臺去掉。
? ?6、刪除u-boot-2010.06/board/ti除evm外的其他所有文件夾和文件;
同時TI文件夾也保留好幾家第三方的板子,比如最典型的beagle xM,還有ti 的DM8148 DM8168的。我們直接使用ti 的evm板,或者參考其他ARM 學習板有關UBOOT移植的移植,重新起個個人的名字或公司名字,修改對應Makefile等等,太多文章介紹了。
? ?7、刪除u-boot-2010.06/include/configs除omap3_evm.h其他文件(注意這里是文件);
這個目錄下的頭文件和平臺有關,DM3730使用的是omap3_evm.h,其他頭文件可以干掉。
? ?8、刪除u-boot-2010.06/ nand_spl和onenand_ipl:
目前在DAVINCI平臺還沒發覺用到onenand的東西,可以去掉;
? ?好了,經過上面的刪除工作,這個u-boot-2010.06已經很簡潔了,壓縮備份很方便,當然還可以刪除更簡潔的,這里就不詳細說了。
三:編譯u-boot-2010.06
在u-boot-2010.06/下生成build-u-boot-all.sh和build-u-boot-tmp.sh的兩個文件:
build-u-boot-all.sh內容為:
exportPATH=$PATH:/home/davinci/dm3730/dvsdk4_03/linux-devkit/bin:
make distclean
makeomap3_evm_config
make
cp u-boot.bindm3730_uboot.bin
cp u-boot.bin/tftpboot/dm3730_uboot.bin
上面的會直接讀取總的Makefile第3000多行的:
omap3_evm_config : unconfig
? ? ? @$(MKCONFIG) $(@:_config=) armarm_cortexa8 evm ti omap3
編譯參數,這樣會自動去選擇編譯,u-boot-2010.06\arch\arm\cpu\arm_cortexa8\omap3\里邊的源碼和u-boot-2010.06\board\ti\evm\里邊的源碼,并且指定include u-boot-2010.06/include/configs/omap3_evm.h的平臺頭文件。
build-u-boot-tmp.sh內容為
exportPATH=$PATH:/home/davinci/dm3730/dvsdk4_03/linux-devkit/bin:
make
cp u-boot.bindm3730_uboot.bin
cp u-boot.bin/tftpboot/dm3730_uboot.bin
對這兩個sh文件進行:
chmod +x build-u-boot-all.sh
和
chmod +x build-u-boot-tmp.sh
然后第一次或者每次做了make distclean動作后,都有先執行./ build-u-boot-all.sh,進行omap3_evm_config。以后改動改動源碼的時候可以不要重復make distclean和make omap3_evm_config,直接使用./build-u-boot-tmp.sh編譯就可以了。build-u-boot-all.sh或build-u-boot-tmp.sh文件自動幫你copy文件到主機tftp server對應的目錄/tftpboot/。
四、修改移植
上面第三點已經講明如何鏈接編譯omap3_evm_config ,那么我們現在可以進行對應的移植和修改源碼。
1、針對DM3730芯片,我們先從u-boot-2010.06/include/configs/omap3_evm.h這個文件修改,讓他指向對應的芯片平臺;
#defineCONFIG_ARMCORTEXA8 ?1 ? ? /* This is an ARM V7 CPU core */
#defineCONFIG_OMAP ? ? ? ? ? ? ? ? ? ? ? ? ? ?1 ? ? /*in a TI OMAP core */
#defineCONFIG_OMAP34XX ? ? ? ? ? 1 ? ? /* which is a 34XX */
#defineCONFIG_OMAP3430 ? ? ? ? ? ? 1 ? ? /* which is in a 3430 */
#defineCONFIG_OMAP3_EVM ? ? ? ?1 ? ? /* working with EVM*/
這個頭文件最前面的宏定義講明了DM3730所屬的ARM架構,T也屬于TI 公司 OMAP系列當中的OMAP34XX家族的芯片,OMAP3430-à3530--à3630-àDM3730是軟件硬件架構一脈相承的芯片系列。我們選擇TI EVM板子模式。
/*
* select serial console configuration
*/
#if 1
#defineCONFIG_CONS_INDEX ? ? ? ? ? ? 3
#defineCONFIG_SYS_NS16550_COM3 ? ? ? ?OMAP34XX_UART3
#defineCONFIG_SERIAL3 ? ? ? ? ? ? ? ?3 ? ? /* UART3 on TY OMAP3 EVM */
#else
#defineCONFIG_CONS_INDEX ? ? ? ? ? ? 2
#defineCONFIG_SYS_NS16550_COM2 ? ? ? ?OMAP34XX_UART2
#defineCONFIG_SERIAL2 ? ? ? ? ? ? ? ?2 ? ? /* UART2 on TY OMAP3 EVM TEST */
#endif
TI EVM定義的LINUX調試串口指定是UART1,DM3730和DM6446一樣一共有3個UART,都可以用來做LINUX軟件調試的串口,我們的板子也和其他公司一樣使用UART3做為調試串口,而不是TI的EVM指定的UART1,因為上篇文章《DAVINCIDM3730開發攻略——xload-1.51移植》提到過DM3730的BOOT MODE,有種BOOT模式使用了SD-àNAND-àUART3,所以我們這里使用UART3。而往下看找到有關UBOOT串口調試的BOOTDELAY:
/* Environmentinformation */
#defineCONFIG_BOOTDELAY 1
這個UBOOT的delay等待用戶按鍵調試時間太長了,把10秒改成1秒,有些產品為了加快BOOT 時間,賣出去的產品不需要調試,也可以直接改為0。
繼續往下看,
/* commands toinclude */
#include<config_cmd_default.h>
這里邊定義了很多CONFIG_CMD_XXX的功能,如果讓UBOOT編譯出來的文件比較小,可以使用#undef把某些不常用的功能屏蔽掉。
#defineCONFIG_CMD_EXT2 ? ? ? ? ? /* EXT2 Support ? ? ? ? ? ? ? */
#defineCONFIG_CMD_FAT ? ? ? ? ? ? ?/* FAT support ? ? ? ? ? ? ? ? ?*/
#defineCONFIG_CMD_JFFS2 ? ?/* JFFS2 Support ? ? ? ? ? ? ?*/
#define CONFIG_CMD_MTDPARTS ? ?/* Enable MTD parts commands */
#define CONFIG_MTD_DEVICE ? ?/* needed for mtdparts commands */
#define MTDIDS_DEFAULT ? ? ? ? ? ? ? ? ? "nand0=nand"
#define MTDPARTS_DEFAULT ? ? ? ? ? ? "mtdparts=nand:256k(x-loader),"\
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "256k(u-boot-env),1280k(u-boot),"\
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "5m(kernel),-(fs)"
上面紅色字體是本人添加修改的,使能在UBOOT里邊使用MTD分區。
同時我們打算使用256K字節做為u-boot 參數保存空間,偏移地址是x040000的地址,所以omap3_evm.h后面(第320行左右的地方)提到的
#defineONENAND_ENV_OFFSET ? ? ? ? 0x00040000 /*environment starts here */
#defineSMNAND_ENV_OFFSET ? ? ? ? ? ?0x00040000 /*environment starts here */
改成上面的0x00040000。
這里首先聲明桐燁科技的DM3730板子NAND是512M BYTE,DDR也是512M BYTE,網口使用DM9000,不同公司的開發板估計有不同的配置,這個信息很重要,下面NAND分區定義和程序燒寫都需要這了解這方面的信息。
然后到看到#define CONFIG_EXTRA_ENV_SETTINGS 的修改:
定義這個CONFIG_EXTRA_ENV_SETTINGS前,需要補充一些NAND 存放XLAOD,UBOOT,KERNEL等等知識,本人在上篇《DAVINCI DM3730開發攻略——xload-1.51移植》提到UBOOT 編譯處理的BIN文件存放在NAND FLASH的地方,這里再更詳細描述一下:
//0x000000000000-0x000000040000: "X-Loader"(DM3730 xlaod存放在NAND的位置)
//0x000000040000-0x000000080000: "U-Boot Env"(uboot 參數存放在NAND的位置)
//0x000000080000-0x000000200000: "U-Boot"(uboot 本身存放在NAND的位置)
//0x000000200000-0x000000C00000: "Kernel"(kernel存放在NAND的位置)
//0x000000C00000-0x000008400000: "ubifs0"(主要的文件系統UBIFS存放在NAND的位置)
//0x000008400000-0x00000FC00000: "ubifs1"(備用的UBIFS存放在NAND的位置,也可以不要)
//0x00000FC00000-0x000010000000: "user data"(保存一些用戶自己定義的數據)
//loadaddr ==0x80300000(TFTP 下載XLAOD,UBOOT,KERNELBIN文件到內存的起始偏移地址)
//ubifs loadaddr== 0x81000000(TFTP 下載比較大的UBIFSBIN文件到內存起始偏移地址)
//u-boot codeaddress == 0x80E80000(UBOOT本身存放到內存運行的偏移地址)
這是我們修改后的#define CONFIG_EXTRA_ENV_SETTINGS源碼:
#define CONFIG_EXTRA_ENV_SETTINGS\
? ? ? "loadaddr=0x80300000\0" \
? ? ? "rdaddr=0x81000000\0"\
? ? ? "console=ttyS2,115200n8\0" \
? ? ? "mpurate=1000\0" \
? ? ? "vram=12M\0" \
? ? ? "dvimode=1280x720MR-16@60\0" \
? ? ? "defaultdisplay=dvi\0" \
? ? ? "nandroot=ubi0:rootfs\0" \
? ? ? "nandrootfstype=ubifs\0" \
? ? ? "nandargs=setenv bootargsconsole=${console} rw mem=120M@0x80000000 mem=256M@0xA0000000 " \
? ? ? ? ? ? ?"mpurate=${mpurate} " \
? ? ? ? ? ? ?"vram=${vram} " \
? ? ? ? ? ? ?"ip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0:tgt:eth0:off"\
? ? ? ? ? ? ?"omapdss.def_disp=${defaultdisplay}" \
? ? ? ? ? ? ?"omapfb.mode=dvi:${dvimode}" \
? ? ? ? ? ? ?"ubi.mtd=4 "\
? ? ? ? ? ? ?"root=${nandroot} " \
? ? ? ? ? ? ?"rootfstype=${nandrootfstype}" \
? ? ? ? ? ? ?"init=/initandroidboot.console=ttyS2\0" \
? ? ? "nfstvargs=setenv bootargsconsole=ttyS2,115200n8 rw mem=120M@0x80000000 mem=256M@0xA0000000 mpurate=1000vram=12M omapfb.mode=tv:720x576@25 omapdss.def_disp=tvip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0:tgt:eth0:offroot=/dev/nfsnfsroot=192.168.1.252:/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs,nolock\0"\
? ? ? "nfslcdargs=setenv bootargsconsole=ttyS2,115200n8 rw mem=120M@0x80000000 mem=256M@0xA0000000 mpurate=1000vram=12M omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay}init=/init androidboot.console=ttyS2ip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0:tgt:eth0:offroot=/dev/nfsnfsroot=192.168.1.252:/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs,nolock\0"\
? ? ? "tftpboot=tftp 80300000dm3730_kernel.bin; bootm 80300000\0" \
? ? ? "userboot=nand read ${loadaddr}200000 400000; bootm ${loadaddr}\0" \
? ? ? "erase_env=nand erase 4000040000\0" \
? ? ? "eraseall=nand erase\0" \
? ? ? "updatexload=tftp 80300000dm3730_xload.bin;nand erase 0 40000;nandecc hw;nand write.i 80300000 0${filesize}\0" \
? ? ? "updateuboot=tftp 80300000dm3730_uboot.bin;nand erase 80000 180000;nandecc sw;nand write.i 80300000 80000${filesize}\0" \
? ? ? "updatekernel=tftp 80300000dm3730_kernel.bin;nand erase 200000 500000;nandecc sw;nand write.i 80300000200000 ${filesize}\0" \
? ? ? "updaterootfs=tftp 81000000dm3730_ubifs.bin;nand erase C00000 7800000;nandecc sw;nand write.i 81000000C00000 ${filesize}\0" \
? ? ? "nandboot=echo Booting from nand...; " \
? ? ? ? ? ? ?"run nandargs; " \
? ? ? ? ? ? ?"nand read ${loadaddr} 200000400000; " \
? ? ? ? ? ? ?"bootm ${loadaddr}\0" \
? ? ? "nfstvboot=echo Booting from nfs...; " \
? ? ? ? ? ? ?"run nfstvargs; " \
? ? ? ? ? ? ?"nand read ${loadaddr} 200000400000; " \
? ? ? ? ? ? ?"bootm ${loadaddr}\0" \
? ? ? "nfslcdboot=echo Booting from nfs...; " \
? ? ? ? ? ? ?"run nfslcdargs; " \
? ? ? ? ? ? ?"nand read ${loadaddr} 200000400000; " \
? ? ? ? ? ? ?"bootm ${loadaddr}\0" \
? ? ? " fact_update =nand erase;mmc init;"\
? ? ? ? ? ? "fatloadmmc 0 80300000 dm3730_xload.bin;nandecc hw;nand write.i 80300000 0 ${filesize};"\
? ? ? ? ? ? "fatloadmmc 0 80300000 dm3730_uboot.bin;nandecc sw;nand write.i 80300000 80000${filesize}; "\
? ? ? ? ? ? "fatloadmmc 0 80300000 dm3730_kernel.bin;nandecc sw;nand write.i 80300000 200000${filesize}; "\
? ? ? ? ? ? "fatloadmmc 0 81000000 dm3730_ubifs.bin;nandecc sw;nand write.i 81000000 C00000${filesize};"
注意:上面源碼格式很講究,特別是( \ ? “” ? \0 ?; ?$)等標點符號,mpurate=1000表示跑1G的A8;自從我們的linux-2.6.32支持ubifs 文件系統后,我們再也不用所謂的JFFS2和YAFFS2了。我們公司支持512M 的內存而且CS0片選信號指向0x80000000(前段),第2段的片選信號CS1指向0xA0000000(后段)。為什么這樣分配呢?前面120M和后面256M都是給LINUX系統的,而前段256M-120M=136M是給DSP用的,當然DSP里邊還包括CMEM共享內存。這前段256M的內存分配是動態的,你可以分配80M給LINUX,那么DSP和CMEM就可分配更多的空間了。至于DSP里邊如何細分,和應用程序使用的loadmodule.sh這個文件如何配合,這里不重點論述,那是在以后的內核移植再說。還有,有些其他開發板公司的內存如果只有256M字節,那么mem=256M@0xA0000000必須去掉,否則內核根本起不來。
上面有很多BOOT方式,比如nandboot,nfstvboot, tftpboot,我們直接使用run tftpboot就可以通過網絡動態下載TFTPSERVER里邊的dm3730_kernel.bin,然后使用默認的bootargs UBOOT參數進行NFS調試,或者run nfstvboot,也可以NFS,run nfstvboot表示視頻輸出是TV輸出,這個和內核有關,以后內核移植有個地方有選擇的編譯;run nfslcdboot表示從LCD接口輸出視頻,可以跑android安卓文件系統。
有時客戶在uboot命令行對bootargs進行設置,使用到這個剛設置好的bootargs,可以通過使用上面的userboot進行啟動。
set bootcmd “run userboot”
saveern
同樣使用nandboot也可以使用setbootcmd “run nandboot”和saveenv的命令實現。
在測試的時候,我們和主機TFTP配合,直接通過run updatexload去網絡升級xlaod,run updateuboot去升級燒寫uboot,run updatekernel去燒寫內核,當然了,你的tftpboot目錄下要有對應的BIN文件,這里就不多說了,以前的DM6446、DM36X開發攻略都提示過。
繼續往下看代碼:
#defineCONFIG_BOOTCOMMAND "run nandboot"
#defineCONFIG_BOOTARGS \
"console=ttyS2,115200n8rw mem=120M@0x80000000 mem=256M@0xA0000000 mpurate=1000 vram=12Momapfb.mode=dvi:1280x720@60 omapdss.def_disp=lcdip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0:tgt:eth0:offroot=/dev/nfsnfsroot=192.168.1.252:/home/davinci/dm3730/dvsdk4_03/filesystem/dm3730rootfs,nolock"
這個是默認的bootargs的參數,默認使用nandboot。
? ?U-BOOT保存在NAND FLASH的參數,可以在U-BOOT命令行使用pri命令或pritenv命令看看。
最后面在#if defined(CONFIG_CMD_NET)的后面加上:
/* DM9000 */
#defineCONFIG_NET_MULTI ? ? ? ? ? ? ? ?1
#defineCONFIG_NET_RETRY_COUNT ? ? ? ? ?20
#defineCONFIG_DRIVER_DM9000 ? ? ? ? ? ?1
#defineCONFIG_DM9000_BASE ? ? ? ? ? ? ?0x2c000000
#defineDM9000_IO ? ? ? ? ? ? ? ? ? ? ?CONFIG_DM9000_BASE
#defineDM9000_DATA ? ? ? ? ? ? ? ? ? ?(CONFIG_DM9000_BASE + 0x400)
#defineCONFIG_DM9000_USE_16BIT ? ? ? ? 1
#defineCONFIG_DM9000_NO_SROM ? ? ? ? ? 1
#undef ?CONFIG_DM9000_DEBUG
#defineCONFIG_ETHADDR ? ? ? ? ?88:11:22:33:44:77
#defineCONFIG_IPADDR ? ? ? ? ? 192.168.1.188
#defineCONFIG_SERVERIP ? ? ? ? 192.168.1.252
#defineCONFIG_GATEWAYIP ? ? ? ?192.168.1.1
#defineCONFIG_NETMASK ? ? ? ? ?255.255.255.0
我們自己修改的UBOOT和內核能夠把MAC (ETHADDR)地址傳給內核;
這個MAC正規的申請途徑可以GOOGLE一下,而測試調試可以隨便定義;
板子的靜態IP是定義192.168.1.188,而服務器主機的地址是192.168.1.252,不同公司有不同公司的網段和IP地址,用戶可以修改。
好了,omap3_evm.h已經修改完畢。
2、修改u-boot-2010.06\arch\arm\cpu\arm_cortexa8\omap3\
這里邊沒什么好改動的,估計要改動的就是lowlevel_init.S,去配不同的PLL,這個參考手冊見sprugn4q.pdf。然后就是注意修改mem.c里邊的gpmc_init()的BOOT模式,到底內核是從MMC讀還是從NAND讀到內存。
3、修改u-boot-2010.06\board\ti\evm\
這里邊的Evm.h和Evm.c就是對DM3730管腳復用配置再次進行處理,在上篇《DAVINCI DM3730開發攻略——xload-1.51移植》也提到過,DM3730管腳復用比較復雜,有7種不同的模式,m0~m7,在evm.h代碼里邊:
/*
* IEN ?-Input Enable
* IDIS - Input Disable
* PTD ?-Pull type Down
* PTU ?-Pull type Up
* DIS ?-Pull type selection is inactive
* EN ? -Pull type selection is active
* M0 ? -Mode 0
* The commented string gives the final muxconfiguration for that pin
*/
#define MUX_EVM()\
這個就說明了你使用的某個管腳是M0默認模式,還是M4GPIO模式,而GPIO模式是使用IEN(輸入)還是IDIS(輸出 ),GPIO管腳上拉PTU還是下拉PTD,上拉下拉是否要使能DIS和EN。
MUX_VAL這種格式宏定義在u-boot-2010.06\arch\arm\include\asm\arch-omap3\mux.h定義,指向對應的寄存器。
舉個例子:
比如I2C3,DM3730一共有4個I2C總線,我們板子只需要I2C1和I2C2兩個總線就夠用了,那么多余的I2C3和I2C4可以當作GPIO使用。
? ? ? MUX_VAL(CP(I2C3_SCL), ? ? ? ? (IEN | PTU | EN ?| M0)) /*I2C3_SCL*/\
? ? ? MUX_VAL(CP(I2C3_SDA), ? ? ? ?(IEN | PTU | EN ?| M0)) /*I2C3_SDA*/\
如果是這樣的代碼,表示你使用I2C3使用M0模式,那這兩個管腳使用I2C的模式,而不是GPIO,
? ? ? MUX_VAL(CP(I2C3_SCL), ? ? ? ? (IEN | PTU | EN ?| M4)) /*GPIO184*/\
? ? ? MUX_VAL(CP(I2C3_SDA), ? ? ? ?(IEN | PTU | EN ?| M4)) /*GPIO185*/\
這樣的代碼表示I2C3被用來做GPIO,IEN表示用作輸入,內部上拉電阻,而且上拉電阻使能,
MUX_VAL(CP(I2C3_SCL), ? ? ? ?(IDIS | PTU | EN ?| M4)) /*GPIO184*/\
? ? ? MUX_VAL(CP(I2C3_SDA), ? ? ? ?(IDIS | PTU | EN ?| M4)) /*GPIO185*/\
這樣的代碼表示I2C3被用來做GPIO,IEN表示用作輸出,內部上拉電阻,而且上拉電阻使能。
其實也很好理解。我們在UBOOT詳細定義了管腳復用,那么以后在內核編譯的時候,首先內核make menuconfig里邊要去掉MUX這個選項,這樣內核就沒必要再做一次管腳配置了。
寫到這,對DM3730 UBOOT的移植應該有個頭緒了,具體的應用,一些BUG,需要具體問題具體分析,不同的網口芯片,不同的NAND和DDR芯片有不同的驅動,這里就不多說了。U-BOOT的移植在ARM平臺來說,大同小異,雖然一個是ARM926,一個是A8,或者A9,A12,A15,但對于軟件工程師來說,如果不涉及到匯編代碼的編寫,其實都是一樣的C語言,一樣的UBOOT軟件架構。UBOOT的目的無外乎就是把linux內核給跑起來,把一些參數傳給內核,板子啟動的時候做些初始化的工作,或者一些測試調試工作。真正體現產品的功能價值就是內核和對應的應用程序。
(聲明:
? ?桐燁科技DM3730/DM6446的板子和其他公司的開發板不一樣,特別是DM3730的板子,目前國內好多家公司都只提供ARM端(CORTEX-A8)的應用例子,很少介紹如何添加客戶自己的算法到DSP端的例子,有些需要做DSP算法的人貪便宜,結果買這些便宜的板子回去花大量時間來學習,遲遲搞不清楚整個架構,浪費的這些時間難道不是資金嗎?我們桐燁科技的板子都幫你采集好YUV格式的視頻圖像,并教會你如何把這個原始的圖像數據放到DSP端進行處理,然后再教會你如何傳處理過的圖像數據和參數到ARM端。同時提醒客戶還要注意一些冒牌的公司,特別是杭州有家沒道德的公司直接拿我們桐燁科技的DM3730開發板圖片放到他們公司網站上,欺騙其他人,我們桐燁科技從來沒有想到讓其他公司做代理。)
總結
以上是生活随笔為你收集整理的DAVINCI DM3730开发攻略——U-BOOT-2010.06的移植的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输出一个整数的二进制表示中1的个数
- 下一篇: git pull远程master_git