2017年4月1日 星期六

[U-boot] bootenv set

//For android
In include/android_image.h - #define ANDR_BOOT_ARGS_SIZE 512
char append_bootargs[ANDR_BOOT_ARGS_SIZE];
sprintf(append_bootargs, "androidboot.revision=%u", get_board_rev());
env_set("append_bootargs", append_bootargs);
In common/image-android.c- will to get the append_bootargs
android_image_get_kernel()
{
...
/* Add 'append_bootargs' to hold some paramemters which need to be appended
  * to bootargs */
 char *append_bootargs = env_get("append_bootargs");
...
}


//Kernel command line
char commandline[2048];
char *bootargs = env_get("bootargs");

if (bootargs)
    snprintf(commandline, 2048, "board_rev=%u %s", get_board_rev(), bootargs);
else
    sprintf(commandline, "board_rev=%u", get_board_rev());

env_set("bootargs", commandline);
In arch/arm/lib/bootm.c- will to get the commandline
static void boot_prep_linux(bootm_headers_t *images)
{
 char *commandline = env_get("bootargs");
...
}

[U-boot] [I.MX6] bootenv emmc set error

If you bootarg set error ,can clear by mfg_tool
but you need know the emmc block address

MFG_tools/Profiles/Linux/OS Firmware/ucl2.xml

<CMD state="Updater" type="push" body="$ dd if=/dev/zero of=/dev/mmcblk%mmc% bs=1k seek=384 conv=fsync count=129">clear u-boot arg</CMD>

The persistent storage, where the block comes from, is platform-specific. Some common storage options (and source file handling that storage option):
NOR flash   common/env_flash.c
SPI flash   common/env_sf.c
MMC         common/env_mmc.c
CONFIG_ definitions in include/configs/yourboard.h will determine the details.


#define CONFIG_SYS_ENV_SECT_SIZE        (128 << 10)     /* 128 KiB */
#define CONFIG_ENV_OFFSET               SMNAND_ENV_OFFSET
#define CONFIG_ENV_ADDR                 SMNAND_ENV_OFFSET
skip 是略過 if (input file)  所指定的檔案 的  bs * count 大小 然後才開始讀入
seek 是略過 of (output file) 所指定的檔案 的  bs * count 大小 然後才開始寫入
bs 大小 default 是 512 bytes, 切記 count 一要給!

dd 常用的參數如下:
if=FILE:指定輸入檔案名稱(input file)為 FILE
of=FILE:指定輸出檔案名稱(output file)為 FILE
ibs=BYTES:指定輸入區塊大小(input block size),一次讀取 BYTES 位元組的資料,預設為 512 位元組
obs=BYTES:指定輸出區塊大小(output block size),一次寫入 BYTES 位元組的資料,預設為 512 位元組
bs=BYTES:指定 block size,一次讀取與寫入 BYTES 位元組的資料,此選項會覆蓋 ibs 與 obs 的設定
cbs=BYTES:一次轉換 BYTES 位元組的資料
count=N:只處理 N 個輸入區塊,每個區塊的大小為 ibs
seek=N:在輸出時跳過輸出檔案的前 N 個區塊,每個區塊的大小為 obs
skip=N:在輸入時跳過輸入檔案的前 N 個區塊,每個區塊的大小為 ibs
conv=CONVS:指定資料的轉換選項,如果一次要指定多種轉換,則以逗點分隔


[u-boot] logo background color setting

此logo背景色在圖中所使用比例最高
再由 bmp_logo_bitmap 判定0x24為背景色
在對應至 bmp_logo_palette 可得知0x24 is 0x0FFF
out/uboot/include/bmp_logo_data.h
unsigned short bmp_logo_palette[] = {
0x0000,  0x0FFF,  0x0666,  0x0666,  0x0FFF,  0x0666,  0x0666,  0x0F00,
0x0F00,  0x0FFF,  0x0FFF,  0x0F00,  0x0666,  0x0666,  0x0000,  0x0F00,
0x0666,  0x0666,  0x0E11,  0x0F00,  0x0FFF,  0x0FFF,  0x0F00,  0x0FFF,
...
}
unsigned char bmp_logo_bitmap[] = {
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
...
}

經過下列運算,可得知背景色為 0xf0

uboot-imx/drivers/video/cfb_console.c
for (i = 0; i < VIDEO_LOGO_COLORS; i++) {
logo_red[i] = (bmp_logo_palette[i] & 0x0f00) >> 4;
logo_green[i] = (bmp_logo_palette[i] & 0x00f0);
logo_blue[i] = (bmp_logo_palette[i] & 0x000f) << 4;
}

在此處如果 *CONFIG_SYS_CONSOLE_FG_COL* & *CONFIG_SYS_CONSOLE_BG_COL*
皆有定義,則會使用所定義之 背景/前景 顏色填入
uboot-imx/include/video_fb.h
#if defined(CONFIG_SYS_CONSOLE_FG_COL) && defined(CONFIG_SYS_CONSOLE_BG_COL)
#define CONSOLE_BG_COL            CONFIG_SYS_CONSOLE_BG_COL
#define CONSOLE_FG_COL            CONFIG_SYS_CONSOLE_FG_COL
#else
#define CONSOLE_BG_COL            0x00
#define CONSOLE_FG_COL            0xa0
#endif

因此我在project.h加入下方的定義,來完成背景色的填充
#define CONFIG_SYS_CONSOLE_FG_COL 0xa0
#define CONFIG_SYS_CONSOLE_BG_COL 0xf0


[bootargs environment]Enable hdmi and uart console

For IMX 6Q
add:
androidboot.selinux=disabled androidboot.dm_verity=disabled

modify:
video=mxcfb1:dev=hdmi,1920x1080M@60,bpp=32

[U-boot] logo

在有實現LCD顯示和LCD命令行終端的U-boot中,默認情況下在左上角都有顯示一個logo,如果是atmel的芯片,就會有atmel的logo,三星的則是denx的logo。如果想把它改成自己喜歡的或者公司的logo,則只要作簡單的修改便可以實現。

一,圖片的放置路徑
所有的開機logo都放在了/tools/logos之下,所以,把你需要顯示的logo圖片(bmp格式)也放置到該目錄下。根據你所設置的顯示幀緩存的大小,圖片大小有所限制。使用這種方法還有一個限制是:圖片只能是8bpp的bmp圖(參考uboot源碼)。Tekkman文章中所說的“所替換的logo必須和原來的大小、格式一模一樣,否則會出現u-boot使用過程中宕機重啟的後果”,我自己親測中並未遇到,當然,我也並沒有做足夠的測試,只是這並不需要和原圖的大小一模一樣。

二,修改Makefile文件
修改/tools目錄下的Makefile文件
ifeq ($(LOGO_BMP),) 
LOGO_BMP= logos/denx.bmp 
endif
把denx.bmp 替換為你需要顯示的logo圖片的文件名,保存退出,重新編譯uboot。


三、圖片的轉換腳本
在製作圖片前,請您現確認您的Linux主機上安裝了Netpbm工具包。

sudo apt-get install netpbm
jpegtopnm logo.jpg | ppmquant 31 | ppmtobmp -bpp 8 > logo.bmp

使用方法: (腳本名) ( 待處理的JPG圖片名) (輸出文件名)

U-Boot中的Splash Screen

U-Boot配置

    在U-Boot中使用Splash Screen,可以實現U-Boot啟動後,在LCD上顯示自定義圖片,起到友好的界面顯示作用。使用Splash Screen需要在配置文件中使能BMP圖片功能和SPLASH功能:
#define CONFIG_CMD_BMP
#define CONFIG_SPLASH_SCREEN

實例

    並且要定義splashimage變量以及在splash變量所定義的地址存放bmp圖片。以2MB的SST30VF1601為例,工32個扇區,規劃如下:
 項目    
 地址範圍
扇區 
大小 
 說明
U-Boot 
0x0000 0000 ~ 0x0010 0000 
0~15 
1M 

 參數
0x0010 0000 ~ 0x0018 0000 
16~23 
512K 

splashimage 
0x0018 0000 ~ 0x0020 0000 
24~31 
512K 

操作    

現在要實現splash screen,需要進行操作,先下載一個圖片到內存中,然後擦除FLASH的splashimage區域,接著將圖片寫入splashimage區域,最後設置並保存splashimage環境變量即可。
    U-Boot> tftp a0008000 logo.bmp ;下載文件到內存
    U-Boot> erase 1:23-31 ;擦除Flash的splashimage區域
    U-Boot> cp.b a0008000 00180000 $filesize ;將logo寫到Flash的splashimage區域
    U-Boot> setenv splashimage 00180000 ;設置splashimage環境變量
    U-Boot> saveenv ;保存環境變量

    u-boot啟動後,輸入bmp d $splashimage即可在LCD上顯示logo圖片。為了實現開機就顯示logo,可以修改common/lcd.c文件,在其中加入實現bmp d $splashimage的代碼即可。



自定義u-boot的開機logo的方法

ifeq ($(LOGO_BMP),) 

    LOGO_BMP= logos/denx.bmp 

endif 

ifeq ($(VENDOR), atmel) 

    LOGO_BMP= logos/atmel.bmp 

endif 

ifeq ($(VENDOR),ronetix) 

    LOGO_BMP= logos/ronetix.bmp 

endif 




refer : http://blog.chinaunix.net/uid-9688646-id-1998453.html