DAVINCI DM365-DM368開發攻略——U-BOOT-2010.12及UBL的移植

??? 從盛夏走到深秋,我們繼續DAVINCI DM365-DM368的開發。說來慚愧,人家51CTO熱情支持本博客,而本人卻一直沒有像其他博客之星一樣頻繁更新博客,心里確實說不過去。管理公司確實很累,有更急的客戶的項目要做,我們成功先推出了DM6446-810MHz的核心板( http://www.tongyetech.com ),期間深圳安防展也接見了幾個其他市的客戶,然后繼續我們的DM368開發。

一、DM36X的BOOT過程介紹
DM36x的BOOT過程和DM6446、DM6467完全是一樣的,因為都是ARM926EJS架構,里邊都有一個RBL,這RBL在芯片出廠的時候都燒寫在ROM里,芯片上電復位后RBL在運行,然后讀取BOOT MODE引腳的電平狀態,決定是從NAND FLASH還是從 MMC/SD、UART 、USB、 SPI、 EMAC、HPI中之一的方式BOOT,具體見SPRS558A.pdf和SPRUSG5A.pdf的介紹,這兩個文檔對硬件工程師、軟件驅動工程師來說非常重要。

本篇及以后的DM36X文章基本以DM368為主的介紹,因為DM365--- dvsdk_dm365_4_02_00_06和DM368----dvsdk_dm368_4_02_00_06的UBL,U-BOOT, KERNEL的源碼完全是一樣的,如果不考慮2A算法,DM368就是DM365的超頻超出來的高清!
二、DM36X 的UBL移植
關于UBL的移植,本人打算單獨寫一篇文章的,但是UBL和UBOOT太緊密了,是TI davinci芯片的特點,所以放到一起講。我們重點放在NAND BOOT的移植,這個UBL的版本是V1.50,在dvsdk_dm368_4_02_00_06\psp\flash-utils\DM36x和flash-utils\Common目錄下,Common目錄里有非常多東西,包括UBL的驅動源碼、工具、腳本等等。我們主要關注arch,drivers,src,ubl。UBL的main()函數在dvsdk_dm368_4_02_00_06\psp\flash-utils\Common\ubl\src\ubl.c里,這幾個文件夾打開看看就明白什么意思了,這里不羅嗦。
DM36x下有CCS、Common,GNU三個文件夾:
CCS文件夾:
這里邊的程序需要在TI CCS下編譯,通過仿真器和JTAG在DM36X的板子上調試和燒寫NAND FLASH或NOR FLASH,有燒寫Writer的應用程序,用CCS打開工程文件,會連接到dvsdk_dm368_4_02_00_06\psp\flash-utils\Common\ drivers里。
Common文件夾:Common里有核心的文件device.c和device_nand.c。device.c是最重要的文件,這里初始化很多系統的東西,見DEVICE_init():
1、屏蔽所有中斷;
2、清除中斷標志;
3、DEVICE_PSCInit(),Power and Sleep Controller;
4、主芯片管腳復用的設置DEVICE_pinmuxControl(),DM36X的管腳復用很多,很復雜,一共5個PINMUX寄存器需配置;
5、DEVICE_PLL1Init(),PPL1配置,見SPRUSG5A.pdf的35頁開始的介紹,使用不同的頻率的DM36X,這些值都不同,不過TI已經提供參數參考,我們的DM365核心板是:ARM297_DDR243_OSC24,DM368核心板是:ARM432_DDR340_OSC24;
6、DEVICE_PLL2Init(),PPL2的配置,使用同上,不同頻率的值不同;
7、DEVICE_DDR2Init()的配置,市場上不同的DDR2內存芯片需要不同的參數配置,就在這個函數內。
8、DEVICE_EMIFInit(),這個針對NAND FLASH接口或NOR FLASH接口的訪問時序配置;
9、DEVICE_UART0Init()的配置,這個就是我們調試DM36X串口的設置,我們使用UART0來調試LINUX,這里配置不好,后面的開發不用調試了。
10、DEVICE_TIMER0Init()定時器TIMER0的設置;
11、DEVICE_I2C0Init()的設置;
GNU的文件夾:
這個就是在LINUX環境下編譯UBL的環境,修改dvsdk_dm368_4_02_00_06\psp\flash-utils\DM36x\GNU\ubl下的makefile,把
#$(MAKE) -C build TYPE=nor注釋掉,只保留$(MAKE) -C build TYPE=nand,然后是make clean和 make生產ubl_DM36x_nand.bin的文件;
如果出現:device.c:(.text+0x2ec): undefined reference to `__aeabi_uidiv'和device.c:(.text+0x2e8): undefined reference to `__aeabi_uidivmod'的BUG,就是DDR_Get_Val()函數里邊的除法和求余的語句和你的編譯器不配置造成的。
result = ((parm * freq) / 10000) - 1;和if(((parm * freq) % 10000)),我們對參數的求值直接:
tRFC = xxx; //DDR_Get_Val(DDR_T_RFC, DDR_FREQ);
tRP?= xxx; //DDR_Get_Val(DDR_T_RP, DDR_FREQ);
tRCD = xxx; //DDR_Get_Val(DDR_T_RCD, DDR_FREQ);
tWR?= xxx; //DDR_Get_Val(DDR_T_WR, DDR_FREQ);
tRAS = xxx; //DDR_Get_Val(DDR_T_RAS, DDR_FREQ);
tRC?= xxx; //DDR_Get_Val(DDR_T_RC, DDR_FREQ);
tRRD = xxx; //DDR_Get_Val(DDR_T_RRD, DDR_FREQ);
tWTR = xxx; //DDR_Get_Val(DDR_T_WTR, DDR_FREQ);
不用DDR_Get_Val()函數求值,這樣就可以編譯通過了。后來發覺TI的http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/115574/425950.aspx里也有人這人解決,呵呵,沒想到本人的解決辦法和一個網友一樣的。本人記得調試三星2440 UBOOT的時候,有人點到過,這里本人忘記在什么地方改了。
三、介紹u-boot-2010.12的特點
u-boot-2010.12的架構組織越來越向LINUX架構靠攏,這是U-BOOT的發展趨勢。DM36x的UBOOT源碼放在dvsdk_dm368_4_02_00_06\psp的下面,文件夾叫u-boot-2010.12-rc2-psp03.01.01.39,太長了,我們直接u-boot-2010.12。這個u-boot-2010.12支持YAFFS2、UBI等文件系統,支持SD卡、USB、VIDEO等驅動,支持lzma和lzo的內核鏡像壓縮,還有經典的linux shell命令支持模式,就是tab等的妙用,就是在”U-boot >”提示符下鍵入和LINUX 開發主機上一樣的命令,當然這個命令很少,而且有些命令是用戶自己加的。相對以前的u-boot-1.3.4版本等版本,這個新U-BOOT把很多平臺的配置腳本給去掉了。
四、u-boot-2010.12的移植
DAVINCI芯片系列的UBOOT移植大同小異,比較簡單。
1、首先修改:Makefile:
第140行:#examples/standalone \
第141行:#examples/api
第246行: #LIBS += api/libapi.o
等一下我們就可以把一些不相關的文件夾給刪除掉,給u-boot-2010.12瘦身。
第323行:ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(U_BOOT_ONENAND) u-boot.img
后面增加u-boot.img,這個u-boot.img就是我們要燒寫到NAND里邊的BIN文件,可以被UBL給BOOT起來的文件,因為u-boot.img是通過u-boot-2010.12\tools下的mkimage的工具生產的,帶有頭header的文件,這些頭信息能被UBL給識別,所以才能燒寫到NAND FLASH或NOR FLASH里邊去。而u-boot.bin是沒有增加文件頭部信息的文件,不能被UBL直接給BOOT起來。u-boot.bin只能使用軟件BOOT,比如: tftp 0x82080000 u-boot.bin ;go 0x82080000。
最重要的地方修改:350行:-a $(CONFIG_SYS_TEXT_BASE) -e 0x81080000 \
或者-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)\
剛開始這個-e 0是錯誤的,我們把U-BOOT-2010.12的entrypoint定義到0x81080000,這個DDR的地址是在u-boot-2010.12\board\davinci\dm365evm\config.mk
CONFIG_SYS_TEXT_BASE = 0x81080000
這個-e(entrypoint)不能是0,否則無法被UBL給BOOT起來。
第953行是不需要改動的:
davinci_dm365evm_config :?unconfig
@$(MKCONFIG) $(@:_config=) arm arm926ejs dm365evm davinci davinci
DM368也是使用同樣的dm365evm名字。
2、開始刪除一些不相關的文件夾
u-boot-2010.12\api文件夾
u-boot-2010.12\examples
u-boot-2010.12\nand_spl
u-boot-2010.12\onenand_ipl
u-boot-2010.12\arch\里的只保留arm文件夾
u-boot-2010.12\ arch\arm\cpu文件夾里,只保留arm926ejs
u-boot-2010.12\ arch\arm\cpu\arm926ejs文件夾里,只保留davinci文件夾,我們只刪除文件夾,旁邊的cpu.c和Makefile不要刪除,等等;
u-boot-2010.12\board里邊,只保留davinci文件夾,其他統統刪除掉;
u-boot-2010.12\board\davinci\里,只保留dm365evm和common,其他刪除;
u-boot-2010.12\include\configs里,只保留davinci_dm365evm.h,其他文件和文件夾刪除掉;
通過上面的操作,我們的u-boot-2010.12簡化多了。
3、修改最重要的davinci_dm365evm.h
在u-boot-2010.12\include\configs里,davinci_dm365evm.h
修改#define CONFIG_SYS_NAND_MAX_CHIPS1,把以前的2改成1,表示本系統只支持1片NAND FLASH;
把#define CONFIG_BOOTCOMMAND"if mmc rescan 0; then if fatload mmc 0 0x80600000 boot.scr; then source 0x80600000; else fatload mmc 0 0x80700000 uImage; bootm 80700000; fi; fi"給注釋掉,我們不想用SD卡保存內核的BIN文件uImage;
然后定義#define CONFIG_BOOTCOMMAND "run nand_boot",表示從NAND FLASH 讀取內核;
修改UBOOT的BOOTARGS參數:#define CONFIG_BOOTARGS \
"console=ttyS0,115200n8 mem=60M noinitrd rw ip=192.168.1.188:192.168.1.252:192.168.1.1:255.255.255.0 root=/dev/nfs nfsroot=192.168.1.252:/home/davinci/dm368/dvsdk_dm368_4_02_00_06/filesystem/dm368rootfs,nolock"
我們這里提到mem=60M,是有根據的,我們板子是128M-BTYE,因為后面的DVSDK4.02里邊的encodedecode等例子需要用到CMEM,這個和DM6446類似,所以定義為60M。
見dvsdk_dm368_4_02_00_06\filesystem\dvsdk-dm368-evm-rootfs解壓后的etc\init.d\loadmodule-rc文件:
# Default DM368 EVM Memory Map
#
# Start Addr??? Size??? Description
# -------------------------------------------
# 0x00001000??? 32K???? ARM TCM memory
# 0x80000000??? 48 MB?? Linux
# 0x83000000??? 12 MB?? Video driver memory (Linux)
# 0x83C00000??? 68 MB?? CMEM
# 0x88000000??? BOTTOM? ADDRESS
load () {
??? modprobe cmemk phys_start=0x83C00000 phys_end=0x88000000 allowOverlap=1 phys_start_1=0x00001000 phys_end_1=0x00008000 pools_1=1x28672 useHeapIfPoolUnavailable=1
??? modprobe irqk
??? modprobe edmak
??? modprobe dm365mmap
??? mknod /dev/dm365mmap c `awk "\\$2==\"dm365mmap\" {print \\$1}" /proc/devices` 0
}
有些人定義CMEM共享內存小一點的話,那么這個值可以比60M大。后面的參數就是使用靜態固定IP的NFS SERVER路徑,進行NFS調試;
增加
#define CONFIG_IPADDR192.168.1.188
#define CONFIG_SERVERIP192.168.1.252
#define CONFIG_ETHADDR00:03:55:88:00:00
定義板子自己的IP和MAC,這個MAC在保證和其他網絡設備MAC不沖突的前提下,自己調試的時候順便分配。SERVERIP就是我們LINUX開發環境的主機IP地址,主要用做TFTP和NFS調試。
#define CONFIG_EXTRA_ENV_SETTINGS\
"eraseenv=nand erase 0x00060000 0x00020000\0"?\
"eraseall=nand erase 0x00000000 0x08000000\0" \
"updateuboot=tftp 0x84000000 dm368_uboot.bin;nand erase 80000 80000;nand write 84000000 80000 80000\0" \
"updatecore=tftp 0x84000000 dm368_kernel.bin;nand erase 0x00100000 0x00480000;nand write 84000000 100000 300000\0" \
"nand_boot=nboot 0x80700000 0 0x100000;bootm\0" \
"tftp_boot=tftpboot 0x80700000 dm368_kernel.bin;bootm\0"
這個很精典,我以前在DM6446上面U-BOOT-2009.03的移植上說過,在u-boot->的提示下,使用run 命令,就可以批量自動做一些操作。CONFIG_EXTRA_ENV_SETTINGS這個在u-boot-2010.12\common\env_common.c 和u-boot-2010.12\common\env_embedded.c有使用。你盡管在這里定義就可以了。
run eraseenv表示擦除u-boot的參數;
run eraseall表示擦除整片NAND;
run updateuboot表示通過TFTP燒寫dm368_uboot.bin到板子上;
run updatecore表示燒寫內核文件,300000表示內核BIN的大小,我們這里直接定死,3M的內核BIN文件長度夠用了,當然,你可以根據內核大小的動態長度改變燒寫方法;
TFTP先下載BIN文件(uImage)到DDR 的0x84000000地址,然后燒寫到自己定義的分區上,這個和內核linux-2.6.32.17的分區是一一對應的,這點很重要;
"nand_boot=nboot 0x80700000 0 0x100000;bootm\0";內核放在NAND的0x100000,我們使用run nand_boot進行板級內核啟動;
"tftp_boot=tftpboot 0x80700000 dm368_kernel.bin;bootm\0"使用TFTP進行內核軟件啟動,編譯調試內核;
在run eraseenv中,我們使用0x00060000作為U-BOOT參數存放的偏移地址,長度使用128K-BYTE,所以在第183行處開始:
#ifdef CONFIG_NAND_DAVINCI
#define CONFIG_ENV_SIZE??(128 << 10)?/* 128KiB */? //128K-byte for evn
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET?0x00060000
#undef CONFIG_ENV_IS_IN_FLASH
#endif
順便說一下,我們一般不建議在U-BOOT里邊通過TFTP下載和燒寫至少幾十M的文件系統,我們盡量簡化U-BOOT的功能,因為我們產品的重點是在LINUX內核,所有的開發、應用、升級程序都是基于LINUX內核上的,所以我們建議通過LINUX內核驅動來燒寫文件系統,這是后話。
4、使能使用tab鍵功能
這個功能就是能在U-boot->的命令提示符下使用tab鍵,所以說
在davinci_dm365evm.h里一定要在“#define CONFIG_SYS_HUSH_PARSER”的上一行或下一行定義CONFIG_AUTO_COMPLETE;
在u-boot-2010.12\common\command.c里,第165行,把“#if 0”改成“#if 1”;
在u-boot-2010.12\common\env_common.c里,第247行把“#if 0”改成“#if 1”;
5、增加GPIO驅動的功能和修改一些BUG
復位外圍芯片,比如采用GPIO控制網口芯片復位,在u-boot-2010.12\board\davinci\dm365evm\dm365evm.c的board_init()函數,增加GPIO的復位驅動,對一些外圍的芯片復位一下;
在u-boot-2010.12\common\cmd_nvedit.c里,第227行,把“((strcmp (name, "ethaddr") == 0)”用“(0”,這樣就能任意修改保存在網口MAC地址ethaddr;
6、開始編譯
在u-boot-2010.12\arch\arm的config.mk里
#CROSS_COMPILE ?= arm-linux-
CROSS_COMPILE?= arm-none-linux-gnueabi-
我們使用Code Sourcery ARM GCC Tool Chain的Sourcery G++ Lite 2009q1-203 for ARM GNU/Linux。
注意,除了UBL在UBL的文件夾內部編譯外,其他的DVSDK的文件包u-boot,linux,dm365mm,irq ,edma,ceexamples,dmai,還有psp_examples,等等,都是在dvsdk_dm368_4_02_00_06的目錄下編譯,具體見dvsdk_dm368_4_02_00_06的Makefile。
u-boot的編譯是:make u-boot,make u-boot_clean等等;
我們也可以在這個目錄下自己生產一個build_uboot.sh的命令
#build u-boot in dvsdk4_02
make u-boot
chmod 777 /home/davinci/dm368/dvsdk_dm368_4_02_00_06/psp/u-boot-2010.12/u-boot.img
cp -f /home/davinci/dm368/dvsdk_dm368_4_02_00_06/psp/u-boot-2010.12/u-boot.img /tftpboot/dm368_uboot.bin
或者再增加build_uboot_all.sh
#build u-boot in dvsdk4_02
make u-boot_clean
make u-boot
chmod 777 /home/davinci/dm368/dvsdk_dm368_4_02_00_06/psp/u-boot-2010.12/u-boot.img
cp -f /home/davinci/dm368/dvsdk_dm368_4_02_00_06/psp/u-boot-2010.12/u-boot.img /tftpboot/dm368_uboot.bin
使用sh文件幫你做工,要多養成這樣的習慣。
基本上,你的板子網口OK的話,可以通過TFTP把UBOOT燒進去吧,通過仿真器或者其他方式燒寫,我們公司一般不用仿真器燒寫,直接使用uart boot的方式燒寫,自己寫個uart boot的東西,好好看看dvsdk_dm368_4_02_00_06\psp\flash-utils的包里的東西,這里就保留吧。
到這里,整個u-boot-2010.12移植基本完成。有不足的地方還需其他網友指正。本人維護兩個主芯片平臺后,變得非常忙,但本人會堅持寫下去,下一篇是linux-2.6.32.17的移植,以前寫過三篇有關UBOOT的文章,包括S3C2440,本人的目的讓大家縮短開發這些BOOT開發的時間,因為重點的開發是在內核和基于內核的應用程序(信息產業部也大力支持開源的linux及相關技術),讓大家的音視頻網絡產品快點出來,改善人民的生活,推進這個社會的文明,文明是靠科技來推動的,讓那些丑陋的、麻木缺德的、文明倒退的野蠻行為、愚民手段、空洞扭曲、侮辱國人智商的事情盡快暴露出來,碰到棘手的問題也能暴露出來,畢竟廣大人民的智慧是無窮無盡的,是完全有能力解決問題的。但前提是我們要有這樣的科技學術氛圍,身上沒有極其沉重的衣食住行的枷鎖,也沒把絕大部分時間浪費在外語和XX課上(看看人家德國吧),所以我們要堅持我們的技術之路。文明是靠科技來推動的,而科技需要我們千千萬萬的科技人員踏踏實實去動手做事的。
昨天才調試同TVP5158 D1的采集,終于看到圖像了。心里很舒暢。順便曬曬我們這段時間做的兩款核心板:DM368和DM6446-810MHz核心板。核心板以最大限度方便客戶進行功能擴展、集成應用,加快產品研發和上市,降低前期產品研發的風險。我們比較傾向項目合作,開發板不是我們開發的重點。

?

DM368核心板

DM368核心板硬件接口描述:
■板載存儲器:
? - 動態存儲器(SDRAM DDR2):1Gb(128M-byte)
? - 非易失存儲器(NAND FLASH):1Gb(128M-byte)
■板載接口:
? - 1個4位Boot模式選擇接口
? - 16-BIT YCC數字視頻輸入接口
? - 2路可編程輸出時鐘CLOCK0和CLOCK2
? - 1路模擬標清視頻輸出接口TVOUT
? - 1路模擬高清視頻輸出接口YPbPr
? - 1路麥克風差分輸入接口
? - 1路音頻線性輸出接口
? - 1路喇叭差分輸出
? - 3路AD采集接口
? - 1個SD卡接口SD0
? - 1個10/100M網絡差分輸入輸出接口RX和TX
? - 2個RS232串口(UART0,UART1)
? - 1個USB 2.0接口(HOST/DEVICE/OTG)
? - 1個 SPI口SPI1
? - 1個標準 JTAG接口
? - 1個4×4鍵盤接口
?- 18個獨立GPIO口
? - 3路電源輸入接口+1.8V,+3.3V,+1.2V
■單板尺寸:
? 46mm x 46mm x 9.5mm
其中整體高度是9.5mm

?

DM6446-810MHz核心板

DM6446-810MHz核心板采用的是TI TMD320DM6446BZWT8的雙核芯片,ARM9的頻率達到405MHz,DSP-C64+核的頻率達到810MHz,DDR2-667操作頻率配置為189MHz,NAND FLASH為128M-BYTE。集成10M/100M網絡芯片在核心板上,方便客戶設計底板,70mm*47mm,整體高度9mm,比名片更小。

桐燁科技DM6446-810MHz核心板支持硬件接口:
1、VPFE16位總線及H、V信號,完全可以接視頻采集芯片和CMOS SENSOR;
2、VPBE引出RGB24的控制信號,便于接RGB24的LCD屏;
3、CVBS模擬視頻輸出;
4、網口信號及網口LED、LINK信號;
5、I2C接口;
6、SPI接口;
7、SD卡接口;
8、ATA硬盤接口;
9、USB2.0 HOST接口;
10、ASP音頻接口;
11、3個UART接口;
12、18個獨立GPIO接口及其他復用的GPIO接口;
13、JTAG仿真器接口;
14、3個PWM控制線;
15、CLK_OUT0和CLK_OUT1可編程時鐘輸出信號;

16、TI的H264? ENCODE?? LIB達到720P(1280*720)的實時;

本文出自 “集成系統-踏上文明的征程” 博客,請務必保留此出處http://zjbintsystem.blog.51cto.com/964211/713240

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253454.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

陳天藝1636050045假設跑步者1小時40分鐘35秒跑了24英里。編寫一個程序顯示每小時以公里為單位的平均速度值...

public class AverageSpeed{ public static void main(String[]args){ double speedkm 60/(45.5/14); double speedm speedkm /1.6; system.out.println&#xff08;“averagespeed ”speedm "m/h"&#xff09; } }轉載于:https://www.cnblogs.com/Archon-Cty/p/7…

EMVA 1288 測試標準

一、概述 如果要對比兩臺相機的性能,我們應該關注哪些參數呢,是焦距、像素、還是光圈大小?這些參數通常廣為人知,并且很容易做出對比。但在一些專業領域,例如機器視覺、自動駕駛等行業,計算機算法對圖像有著獨特的要求,這些標準有些已經跟不上數字成像的發展步伐,而且其…

Spring Boot - 修改Tomcat默認的8080端口

前言 默認情況下&#xff0c;Spring Boot內置的Tomcat服務會使用8080端口啟動&#xff0c;我們可以使用以下任何技巧去更改默認的Tomcat端口&#xff1b; 注&#xff1a;我們可以通過server.port0配置&#xff0c;去自動配置一個未被占用的http端口&#xff0c;由操作系統實現。…

2017年度目標

語言&#xff1a;python&#xff0c;lisp&#xff0c;js&#xff0c;html5技術&#xff1a;android&#xff0c;hadoop數學&#xff1a;復變函數&#xff0c;代數&#xff0c;概率&#xff0c;數論英語&#xff1a;reading其他&#xff1a;金融/經濟/股票&#xff0c;歷史/史記…

嵌入式系統系統升級內核雙備份的實現方式

1.nand flash MTD分區 kernels/linux-2.6.31.1-cavm1/drivers/mtd/maps/xxxxx-flash.c /* MTD partitions: From CNW5602 32MB * mtd0: 0x000C0000 00020000 "bootloader" * mtd1: 0x00040000 00020000 "factory_config" * mt…

SerDes接口——架構與電路

隨著通信技術的飛速發展&#xff0c;高速串行互連以其結構簡單&#xff0c;不需要傳輸同步時鐘&#xff0c;相比并行傳輸有更高數據傳輸效率的優點&#xff0c;成為現代通信和數據傳輸的重要組成部分。隨著對數據傳輸速率要求的不斷提高&#xff0c;SERDES應運而生。它是一種時…

Springboot分模塊開發詳解(2):建立子工程

1.創建base-entity 選中base工程&#xff0c;右鍵創建一個新的maven工程 自動選擇了base這個目錄存放子工程 創建后&#xff0c;pom.xml修改成如下內容&#xff1a; <?xml version"1.0"?> <projectxsi:schemaLocation"http://maven.apache.org/POM/4…

到天宮做客(2017寒假培訓測試壓軸題)

個人QQ&#xff1a;757394026團隊QQ&#xff1a;466373640個人博客&#xff1a;www.doubleq.winc/noi/信息學奧數博客&#xff1a;http://www.cnblogs.com/zwfymqz 題目描述 有一天&#xff0c;我做了個夢&#xff0c;夢見我很榮幸的接到了豬八戒的邀請&#xff0c;到天宮陪他吃…

NAND FLASH分區規劃

由于BOOTLOADRER、PARAMS以及內核、文件系統都在NAND FLASH上&#xff0c;因此分區就得進行統一規劃。系統的NAND FLASH分區依賴于u-boot和Linux內核兩方面的設置。U-Boot中的NAND分區 文件&#xff1a;include/configs/開發板.h這是Phy3250的參數&#xff0c;Phy3250采用32MB的…

圖像去霧算法學習

現有的圖像采集設備對外界環境的干擾非常敏感,在霧霾環境中,獲取的戶外圖像往往退化嚴重,主要表現為場景特征信息模糊、對比度低、色彩失真,不利于計算機視覺系統對圖像真實特征的提取,從而影響其后續的分析、理解、識別等一系列處理,很大程度上降低了視覺系統的實際應用…

訓練與解碼

BW算法是對某一個HMM(一個音素)進行訓練&#xff0c;需要該HMM對應的觀察向量(一段音頻)&#xff0c;如何讓一段文本中的某個音素找到對應一整段音頻中的一小段音頻&#xff1f;需要用到對齊來找到所有的[音素-音頻]的配對。 訓練時也需要解碼 1&#xff0c;設訓練的一句話有n…

Atlassian發布事故管理解決方案Jira Ops

Atlassian聯合首席執行官兼聯合創始人Scott Farquhar于9月4日宣布&#xff0c;Atlassian推出了一款名為Jira Ops的新產品&#xff0c;并且他們將收購OpsGenie。\\正如“Jira Ops \u0026amp; OpsGenie: powerful incident management”所描述的那樣&#xff0c;Jira Ops是一款新…

U-Boot如何向內核傳遞Flash的分區信息

1.如何對nand 分區。修改mtdparts環境變量就可以了么&#xff1f; 對于目前的U-boot而言,是的.而且, 設置了mtdparts變量之后,你可以在nand read/write/erase命令中直接使用分區的名字而不必指定分區的偏移位置. set bootargs noinitrd consolettySAC0 root/dev/mtdblock3 ro…

Python爬蟲學習系列教程

大家好哈&#xff0c;我呢最近在學習Python爬蟲&#xff0c;感覺非常有意思&#xff0c;真的讓生活可以方便很多。學習過程中我把一些學習的筆記總結下來&#xff0c;還記錄了一些自己實際寫的一些小爬蟲&#xff0c;在這里跟大家一同分享&#xff0c;希望對Python爬蟲感興趣的…

ICer 常用網站推薦

總結一下我經常用到的IC網站&#xff0c;主要是數字IC&#xff0c;大致分資源類和資訊類吧&#xff1a; 一、資訊類 CSDN&#xff1a;目前關于IC的文章也越來越多啊。。https://www.csdn.net/ 知乎&#xff1a;目前來說應該是活躍大佬比較多。。https://www.zhihu.com/ DVCO…

C++成員訪問限定符 private public

private和public稱為成員訪問限定符。用它們來聲明個成員的被訪問權限。 ? ?private?稱為私有的&#xff0c;只能在本類中的成員函數引用&#xff0c;類外不能調用。 ? ?public ?稱為共有的&#xff0c;既可以被本類中的成員函數所引用&#xff0c;也可以被本類中的成員…

內核kernel以及根文件系統rootfs是如何映射到對應的nand flash的

原文 初始化代碼讀取uboot到內存里面&#xff0c;然后跳轉到uboot那里去執行uboot&#xff0c;uboot初始化必要的硬件&#xff0c;加載一些驅動&#xff0c;其中包括nand flash的驅動&#xff0c;然后根據uboot里面設置的一個啟動命令TAG: NAND rootfs Flash 【系統啟動過程…

CMOS 圖像傳感器——Color Filter Array

在介紹CMOS圖像傳感器的工作原理時候說道,像點(Sensor感光的基本單元叫做“像點”)吸收入射光后會有一定概率激發出電子,這個過程叫做光電轉換。光子激發出電子會被像點下方的電場捕獲并存儲起來備用。像點的作用可以類比成一個盛水的小桶,它可以在一定范圍內記錄其捕獲的…

我的一點企業做云經驗

最近&#xff0c;經常有朋友問我在企業做云的經驗&#xff0c;也有人問我OpenStack二次開發項目經驗。正好這方面也有點經歷&#xff0c;那現在就把我過往有關經歷整理整理&#xff0c;總結出幾條心得體會&#xff0c;分享給大家。 技術&#xff1a;我們OpenStack二次開發做了什…

CMOS圖像傳感器——黑電平校正

黑電平(black level ),也稱作Optical Black,很多人也稱呼為OB,指的是光學暗區,即黑色數據的最低電平值,指在經過一定校準的顯示裝置上,沒有一行光亮輸出的視頻信號電平,通常指圖像數據為0時對應的sensor信號電平值。 在CMOS圖像傳感器對圖像進行處理的過程中,黑電平是…