1. 程式人生 > >飛思卡爾IMX6修改uboot預設啟動引數

飛思卡爾IMX6修改uboot預設啟動引數

硬體平臺:飛思卡爾IMX6

核心版本:kernel3.0.35

問題來源:

開發板的預設顯示方式是FPC介面800*480的屏,本專案中用到的屏是工業級的1024*768介面的LVDS屏,更換屏之後,除了移植相應的屏驅動和觸控驅動之外,就是uboot傳輸給核心的啟動引數bootargs需要修改,涉及到批量生產之後,不可能每臺機器在燒寫玩系統之後,還去命令列修改引數,所以在uboot原始碼裡要將預設的啟動引數bootargs修改好

解決方法:

第一步:定位修改的環境變數名稱

拿到這個問題,我想到的入手點就是檢視uboot環境變數,進入uboot命令列模式,輸入print,得到一堆環境變數如下

MX6Q SABRESD U-Boot > print
bootdelay=1
baudrate=115200
ipaddr=192.168.1.103
serverip=192.168.1.101
netmask=255.255.255.0
loadaddr=0x10800000
rd_loadaddr=0x11000000
gatewayip=192.168.1.2
netdev=eth0
ethprime=FEC0
bootloaderimgname=u-boot.bin
kernelimgname=uImage
nfsroot=/opt/EmbedSky/root_nfs
ethaddr=12:32:43:34:21:43
nfsserverip=192.168.1.100
displayArgs=video=mxcfb0:dev=ldb,TQ-ldb_1280768,if=RGB666,bpp=32 ldb=dul0 video=mxcfb1:off video=mxcfb2:off fbmem=48M
bootargs_base_ubuntu=setenv bootargs console=ttySAC0,115200 ${displayArgs}
bootargs_base_linux=setenv bootargs console=ttySAC0,115200 ${displayArgs}


bootargs_base_andorid=setenv bootargs console=ttySAC0,115200 init=/init ${displayArgs} vmalloc=400M androidboot.console=ttySAC0 androidboot.hardware=freescale
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=${ipaddr} fec_mac=${ethaddr} nfsroot=${nfsserverip}:${nfsroot},v3,tcp
bootcmd_net=run bootargs_base_andorid bootargs_nfs; tftpboot ${loadaddr} ${kernelimgname}; bootm
bootargs_mmc_ubuntu=setenv bootargs ${bootargs} root=/dev/mmcblk0p1 rootwait
bootcmd_mmc_ubuntu=run bootargs_base_ubuntu bootargs_mmc_ubuntu; mmc dev 3; mmc read ${loadaddr} 0x800 0x3000; bootm
bootargs_mmc_linux=setenv bootargs ${bootargs} root=/dev/mmcblk0p1 rootwait
bootcmd_mmc_linux=run bootargs_base_linux bootargs_mmc_linux; mmc dev 3; mmc read ${loadaddr} 0x800 0x3000; bootm
bootcmd_mmc_android=run bootargs_base_andorid; booti mmc3
fastboot_dev=mmc3
bootcmd=run bootcmd_mmc_ubuntu
splashimage=0x30000000
splashpos=m,m
lvds_num=1
stdin=serial
stdout=serial
stderr=serial
ethact=FEC0

分析這些環境變數,跟bootargs類似的,就幾個,而且我用的是Linux,所以定位bootargs在本系統中被命名為bootargs_base_linux,再檢視bootargs_base_linux,發現顯示引數是另外一個變數displayArgs,繼而得出:在uboot原始碼中修改此引數即可

第二步:在原始碼中找到displayArgs的初始化位置,通過在souce insight中查詢,定位於include/configs/mx6q_sadroid.h的81行

第三步:另一個問題來了,怎麼修改?對於天嵌的IMX6板子有一個非常簡單的辦法,在uboot選單欄中,選中display args的選項之後,儲存退出,到命令列模式,print  displayArgs即可得到需要的displayArgs值,然後將其複製到uboot原始碼include/configs/mx6q_sadroid.h中替換displayArgs的值

第四步:重新編譯uboot原始碼,得到uboot.bin

注意:第三步中,如果是其他公司的板子,可能沒有uboot選單欄的形式,這樣可能不知道怎麼去修改值,這裡還有其他的辦法,同樣是在source insight中搜索displayArgs,肯定搜到有對這個引數進行處理的程式碼,比如天嵌的IMX6板子上,就是在common/cmd_menu.c檔案中有對其進行的處理,在這裡就可以找到自己對應的屏對應的displayArgs設定