簡單的介紹
打今天起菜鳥的ARM筆記算是開張了,也算給我的這些筆記找個存的地方。
為什么要發(fā)布出來?也許是大家感興趣的,其實這些筆記之所以叫筆記而不是文章,是因為它們完全是本人個人學(xué)習(xí)經(jīng)驗的總結(jié),而這些經(jīng)驗都來自于其他前輩的無私奉獻(xiàn),在這里對這些樂于發(fā)表自己經(jīng)驗的前輩致以由衷的感謝!現(xiàn)在我把這些前輩的文章經(jīng)過自己的理解寫出來一方面是對于他們的尊重,另一方面也希望覺得本人的筆記有參考意義的朋友把這種精神繼續(xù)傳下去。
再次聲明,本人確實是個菜鳥,現(xiàn)在手頭的板子是自己畫的,以RT&ZQ的板子為底版,對部分電路進(jìn)行了改動。比如加入了SD卡,IIC總線鍵盤,觸摸屏,GPS,GPRS等等。并對LCD接口進(jìn)行改造,使之完全適合手頭的SHARP液晶。把網(wǎng)絡(luò),串口,USB這些調(diào)試用接口都外擴(kuò)了,目的是使主板盡量小(目前第一版為了調(diào)試方便,主板特意畫的比較大)。但是存儲部分(RAM ROM)沒有做任何變動,在這里對RT&ZQ致謝!
這塊板子是本人第二個板子(第一塊是個接口板,30根線。)所以走線,設(shè)計都經(jīng)不起推敲,但是同樣非常希望大家能夠指點!
板子基本元件清單說一下吧,方便其他人參考
CPU:44B0
RAM:HY57V641620
ROM:AM29LV160
NET:8019
USB:D12
KEY:ZLG7290
LCD:SHARP LM7M632
目前為止本人做的工作
1 板子的硬件調(diào)試是跟著軟件來的
2 ADS AXD調(diào)試環(huán)境搭建
3 FLSH燒寫筆記
4 UBOOT移植筆記
5 UCLINUX編譯下載簡單筆記
6 字符設(shè)備驅(qū)動開發(fā)
C工程模板使用說明
本模板用于使44B0運行C程序
一般說來匯編用來初始化 之后跳到C入口MAIN函數(shù)處
一、關(guān)于工程文件
1、本目錄下建工程文件(.MCP)
2、工程文件至少包含3個文件44binit.s 44blib_a.s *.c(自己的c文件)
3、44binit.s中開頭部分INCLUDE兩個文件MEMCFG.S Option.s用于基本設(shè)置
注意這兩個文件的存放目錄,即讓INCLUDE找到它們
4、以上文件除自己的c文件之外均為三星公版,不需修改
二、關(guān)于CodeWarrior設(shè)置
1、DebugRel Setting里一般設(shè)置幾項
1)Target Setting->Linker里選ARMLinker
用于設(shè)置連接
2)Target Setting->Post-Linker選ARM fromELF
用于生成FLASH燒錄代碼(只在RAM里運行 而不燒錄則不用)
3)ARM Linker->RO BASE里添地址
根據(jù)板子來,這板子上RAM接的NSCS6,地址0XC000000-0XC7FFFFF;
FLASH接的NSCS0,地址0X00000-0XFFFFF
地址分配原理見44B0數(shù)據(jù)手冊內(nèi)存管理那章的內(nèi)存分配圖
想在RAM里調(diào)試就添0XC000000(比如0XC008000)的地址
但是注意的是地址不要添過界,比如想在RAM里調(diào)試卻添0X00000000 程序可以 進(jìn)入C代碼 但沒法運行
再有
想生成用于燒寫得FLASH代碼 RO地址就需要設(shè)置為0X0000000開始的 而且LAYOUT中也必須設(shè)置44BINIT.O為初始加載文件
以上FLASH測試結(jié)論經(jīng)FLASHPGM測試
而且FLASHPGM不支持BIN文件 只支持INTEL得HEX文件
4)RW可以添 可以不添 一般RO解釋為數(shù)據(jù)段,RW解釋為數(shù)據(jù)段
有時高興了就添上0XC100000(RAM調(diào)試時)
5)ARM Linker->OPTION->Image entry point選擇0xc000000(RAM調(diào)試時)
6)ARM Linker->Layout->Object/Symbol里可以添工程起始程序44BINIT.O 注意是.O不是.S和.0(零)
也可以不添
三、AXD設(shè)置
1)按照BANYANGT或者ARM7正確設(shè)置調(diào)試代理
BANYANGT、ARM7、H-JTAG都是代理,裝哪個無所謂,一般認(rèn)為BANYANGT好,但無論哪個調(diào)試之前必須運行代理
2)在option->configure interface里 在session file 選擇 44b0.ini 這個文件是初始化44b0寄存器的,必須運行
3)Options->Configue Target里本來有兩項,上面上是硬件調(diào)試,下面是軟件仿真(在電腦上仿真)
用ARM7就改第一項(按照ARM7說明改),用BANYANGT就按照BANYANGT說明在下面再加個BANYANGT的驅(qū)動
4)在general標(biāo)簽頁選擇attach,然后確定,最后在file->save session,關(guān)閉AXD(在CodeWarrior里一DEBUG就自動打開)
四、關(guān)于JTAG
1)JTAG一般有幾種 SDT和WIGGLER 我的是WIGGLER的,兩者區(qū)別主要在并口25針定義不一樣(不算復(fù)位腳),與板子上JTAG相連的腳不是區(qū)分JTAG類型的標(biāo)志
只要和44B0對上就行
2)JTAG小板上與44B0大板上JTAH跳線RAM調(diào)試時都不用接 燒FLASH才用到
3)網(wǎng)上流傳的JTAG小板上也有不用RST信號的版本,無所謂,RST信號不是標(biāo)準(zhǔn)的
五、另外
開始的時候犯了低級錯誤,沒設(shè)置OM1 2 3跳線 導(dǎo)致晶體不陣~~~
其他的看萬龍的ARM開發(fā)板使用手冊,寫的還不錯
模板:user94/mamajinco/upload/825806664.rar
這部分可能過于簡單,很少有人寫,但是對于不了解ARM開發(fā)過程的人真的簡單嗎?我是菜鳥,在這卡了3天:)
一般說來有幾種方法,
1)板子原來的BOOTLOADER程序或者為燒寫而編寫的專用ADS程序
比較高級而快速的方法,很多現(xiàn)成的開發(fā)板都用這種方法(相對來說有實力的公司),此狀態(tài)下CPU是運行的,所以速度快。
比如ZLG的,但是對于初學(xué)或者不準(zhǔn)備細(xì)研究硬件的人來說就比較麻煩,因為要編寫(改寫)ADS燒寫程序。愿意的人可以看看。
2)FLUTED
和FLASHPGM一樣,使用的好象叫邊界掃描法,CPU此時并不運行,因此燒寫的比較慢。
在這里也不推薦FLUTED這個軟件,原因比較簡單,麻煩+速度慢。
因為需要編寫(改寫)兩個配置文件,而且是字符界面。倒是有人說這個軟件只能在WIN98下用的說法好象不對(現(xiàn)在有可以讓2000和XP下用的方法)
喜歡的朋友可以用用
3)FLASHPGM(推薦)
很簡單的程序,GUI界面,速度尚好。
設(shè)置很簡單,在CPU里選對型號,當(dāng)然是3星的44B0。在FLASH里也一樣,39LV160,29LV160都有。
確定好地址,RAM地址我的是0XC000000(BANK7上) FLASH地址0X0(BANK0上)
選完了以后讀一下FLASH的ID(左下腳的按鈕吧)能讀出廠家的ID就行。
然后是燒寫了,PROGRAME按鈕,注意的是FLASHPGM不支持BIN格式,按照下面方法處理。
再有就是盡量在寫之前擦一下,PROGRAME菜單里有個選項,打個鉤就OK。
具體燒寫方法可以看我總結(jié)的另一篇文檔,在這里只說說UBOOT相關(guān)的。
前面說過UBOOT編譯以后產(chǎn)生3個文件
u-boot——ELF格式的文件,可以被大多數(shù)Debug程序識別;
u-boot.bin——二進(jìn)制bin文件,純粹的U-BOOT二進(jìn)制執(zhí)行代碼,不保存ELF格式和調(diào)試信息。這個文件一般用于燒錄到用戶開發(fā)板中;
u-boot.srec——Motorola S-Record格式,可以通過串行口下載到開發(fā)板中。
FLASHPGM不支持BIN格式的,可以燒寫u-boot——ELF格式的文件,別看它沒擴(kuò)展名,一樣燒寫。
還有,如果你懶(和我一樣),拿別人現(xiàn)成的BIN文件來燒,F(xiàn)LASHPGM還提供了一個BINTOS19的程序,就在它的安裝目錄下。具體用法運行它,它自己就告訴你了。
注意:有時(尤其是FLASH里已經(jīng)有程序的時候)0XC000000會莫名奇妙的提示內(nèi)存不可以寫,有幾個方法可以試試:把地址改成0x10000000(好象是緩存地址),之后點EREASE擦除芯片,擦除一般說來是不成功的,最后無論如何都下不去,沒關(guān)系,這時候關(guān)閉擦除對話框,然后0x10000000地址不變,燒FLASH,我一般是燒寫一個我自己寫的LED測試小程序把內(nèi)存占上:)。回來這時候再把0X1000000換成0XC000000再按照正常操作,一般可以正常。
這現(xiàn)象的原因就是過去下的程序(多數(shù)是不正確的程序)正在運行 占用了RAM與ROM,下個LED測試小程序就是把這幾個部分清除掉。
如果以上方法還不正常,可以用另一個程序叫FLASHP就差2個字母:)很好!在這里對這個程序的作者致敬??!
用這個軟件擦FLASH,然后再用FLASHPGM燒,原因是FLASHP擦厲害,但寫好象有些問題~~
UBOOT 移植操作(1)
[0]目錄結(jié)構(gòu)
◆ board:和一些已有開發(fā)板有關(guān)的文件,比如Makefile和u-boot.lds等都和具體開發(fā)板的硬件和地址分配有關(guān)。
◆ common:與體系結(jié)構(gòu)無關(guān)的文件,實現(xiàn)各種命令的C文件。
◆ cpu:CPU相關(guān)文件,其中的子目錄都是以U-BOOT所支持的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個特定的子目錄中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設(shè)置指令Cache和數(shù)據(jù)Cache等;interrupt.c設(shè)置系統(tǒng)的各種中斷和異常,比如快速中斷、開關(guān)中斷、時鐘中斷、軟件中斷、預(yù)取中止和未定義指令等;start.S是U-BOOT啟動時執(zhí)行的第一個文件,它主要是設(shè)置系統(tǒng)堆棧和工作方式,為進(jìn)入C程序奠定基礎(chǔ)。
◆ disk:disk驅(qū)動的分區(qū)處理代碼。
◆ doc:文檔。
◆ drivers:通用設(shè)備驅(qū)動程序,比如各種網(wǎng)卡、支持CFI的Flash、串口和USB總線等。
◆fs:支持文件系統(tǒng)的文件,U-BOOT現(xiàn)在支持cramfs、fat、fdos、jffs2和registerfs。
◆ include:頭文件,還有對各種硬件平臺支持的匯編文件,系統(tǒng)的配置文件和對文件系統(tǒng)支持的文件。
◆ net:與網(wǎng)絡(luò)有關(guān)的代碼,BOOTP協(xié)議、TFTP協(xié)議、RARP協(xié)議和NFS文件系統(tǒng)的實現(xiàn)。
◆ lib_arm:與ARM體系結(jié)構(gòu)相關(guān)的代碼。
◆ tools:創(chuàng)建S-Record格式文件 和U-BOOT images的工具。
==========================================================================================
[1]u-boot.1.1.2目錄下有Makefile
1)設(shè)置編譯器
可以看到這一項:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
也就是說這里所用的交叉編譯器是arm-linux-gcc,u-boot默認(rèn)是用這個的,也有用arm-elf-gcc的,arm-elf-tools-20030314.sh,用它來編譯,沒有問題。如果最后MAKE的時候提示找不到arm-linux-gcc就是這錯了,改一下。
arm-elf-gcc是用來編譯uClinux內(nèi)核的工具,arm-linux-gcc用來編譯LINUX
2)加進(jìn)自己板子的項目
搜索B2的這部分文件
B2_config : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 B2 dave
后面加上這部分:
TT_config : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 TT T2T
切記在@./mkconfig $(@:_config=) arm s3c44b0 TT T2T
前面的是Tab來的,TT_config : unconfig也是一樣,不能用空格代替,因為它是靠這個來識別命令的
==========================================================================================
[2]在宿主機(PC機)上建立arm-elf-gcc交叉編譯環(huán)境
1)建立arm-linux-gcc編譯環(huán)境
在RedHat Linux系統(tǒng)下以root用戶登錄,
將cross-2.95.3.tar.bz2文件復(fù)制到/目錄下,
安裝:
# tar jxvf cross-2.95.3.tar.bz2
這個命令會在你的/usr/local/arm/2.95.3目錄下安裝 arm-linux-gcc 交叉編譯程序,
然后在PATH變量中添加一項:/usr/local/arm/2.95.3/bin.
[root@localhost root]# export PATH=$PATH:/usr/local/arm/2.95.3/bin
或
把PATH=:$PATH:/usr/local/arm/2.95.3/bin添加到/ETC/bash_profile文件中
或者
在/etc/bashrc文件中添加一項:
export PATH=:$PATH:/usr/local/arm/2.95.3/bin
之后可以測試一下 echo $PATH
注意:PATH大小寫不一樣,另外LINUX下大小寫是不同的,以后不特別聲明。
注意:命令中的參數(shù)之間都由單個空格或者TAB隔開,命令前有的有# 代表命令行符,不用輸入。
注意:不可在WINDOWS下用winRAR解壓u-boot-1.1.2.tar.bz2或u-boot-1.1.2.tar.gz這種文件,會少文件,去LINUX下,另外解壓的時候也不用非點用命令行操作,LINUX現(xiàn)在對GUI已經(jīng)支持的非常好了,比如解壓只要右鍵點文件,選解壓到當(dāng)前文件夾就可以,執(zhí)行的時候只要雙擊再選“執(zhí)行”
注意:我用的VMWARE(虛擬機)裝的LINUX,要在LINUX和WIN中間傳遞文件用VM-》SETTING里的SHARE FOLDER
該功能是把WIN 下的一個文件夾共享給LINUX。
這個功能必須裝VMWARE TOOLS才能用,
裝VMWARE TOOLS方法:首先在VM-》SETTING里CDROM項里把光驅(qū)設(shè)置為裝入VMWARE安裝文件夾下的LINUX工具的.ISO,LUINUX下就出現(xiàn)CDROM了 拷貝 解壓 安裝不在話下。必須注意的是VMWARE TOOLS在每次重起LINUX之后還必須也重起一下,TMD,誰搞定不用重起告訴我一聲
重起的方法:/etc/init.d/vmware-tools restart
就有消息出來了
注意:另外郁悶的是我的WIN與LINUX之間復(fù)制文字似乎也不順暢,干脆在SHARE FOLDER里建立一個TXT,兩個系統(tǒng)搗文字玩~~
測試:
把終端關(guān)閉,重新打開后執(zhí)行如下命令:
# arm-linux-gcc –v
建立好交叉編譯環(huán)境后可以試著編譯u-boot了
2)也可以建立arm-elf-gcc
與上面類似,用周立功的編譯包直接安裝
會在/usr/local/bin下產(chǎn)生arm-elf-gcc只類的文件
然后設(shè)置路徑
[root@localhost root]# export PATH=$PATH:/usr/local/arm-elf/bin
======================================================================================================
[3] 測試交叉編譯器搞好沒有
編譯個44B0例子 在UBOOT包目錄下執(zhí)行一下命令,以下是編譯的包自帶的DAVE公司板子B2(名)
1) Make distclean (清除以前編譯的痕跡)
2) Make B2_config(B2代表B2板子的,前面見到過)
3) Make
沒問題就可以進(jìn)行下面了
注意:B2默認(rèn)用arm-linux-gcc編譯,要是前面安的arm-elf-gcc的話此時會報錯 把UBOOT目錄下的MAKEFILE按照前面說的改一下
注意:一般說來還會有個問題,懷疑是編譯器的問題 提示什么abi=apcs-gnu只類的找不到吧~~記不住了
改UBOOT目錄下config.mk (好象)
文件里改成如下
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))
原來的行少了$(call cc-option,-mabi=apcs-gnu,) 具體在哪行忘了 CTRL+F搜索一下
其他應(yīng)該沒問題,有問題GOOGLE搜一下,不是通病就是自己安裝的問題了
注意:
MAKE之后會生成三個文件:
u-boot——ELF格式的文件,可以被大多數(shù)Debug程序識別;
u-boot.bin——二進(jìn)制bin文件,純粹的U-BOOT二進(jìn)制執(zhí)行代碼,不保存ELF格式和調(diào)試信息。這個文件一般用于燒錄到用戶開發(fā)板中;
u-boot.srec——Motorola S-Record格式,可以通過串行口下載到開發(fā)板中。
[4]開始配置U BOOT
1)給自己板子個公司起個名,我的公司叫T2T 板子叫TT,剛才那個例子公司名DAVE板子名B2
以B2板子的程序做為模板來做,省很多工作
#cd u-boot-1.1.2//進(jìn)U BOOT目錄
#cd board //進(jìn)BOARD目錄,該目錄下存放各種公司的開發(fā)板,但44B0的好象只有一種B2
#cp -R dave T2T (復(fù)制 并且改名)
#cd T2T
#mv B2 TT (復(fù)制 并且改名)
#cd TT
# mv B2.c TT.c
修改TT里面的Makefile, 把B2改成TT,編譯時如果報的其它類似找不到B2的錯誤也是把相應(yīng)的B2改成TT來處理。
修改T2T/TT/config.mk
TEXT_BASE = 0x0c1000000
修改T2T/TT/Makefile
將所有的B2改為TT
2)/include/configs
cp B2.h TT.h依舊是把B2的改個名
注意:DAVE的板子是用44B0的,但還有其他板子用嗎?怎么確定只有它用?用以下命令
到board目錄查了一下:
#cd u-boot
#cd board
#find . -exec grep -l 44B0 {} \;
結(jié)果是:
./dave/B2/B2.c
B2網(wǎng)站是: http://www.dave-tech.it
3)以下文件修改記錄
----------------------------------------------------------------------------------------------------
-----------------------------------/include/configs/TT.h-------------------------------------------
----------------------------------------------------------------------------------------------------
#define CONFIG_INIT_CRITICAL 1 這個在cpu/s3c44b0/start.S里面用到,如果你的u-boot程序不是在sdram中調(diào)試而是固化到flash中運行的話,這個必不可少。
找到 #define CONFIG_B2 1 改成CONFIG_TT
找到 #define CONFIG_S3C44B0_CLOCK_SPEED 75 主頻改成60
找到Size of malloc() pool這部分設(shè)置,改成這樣。
#define CFG_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Monitor */
#define CFG_ENV_SIZE (64*1024) /* 1024 bytes may be used for env vars*/
#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024 )
#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
#define CFG_ENV_IS_IN_FLASH 1 這個必不可少,如果你想把你的參數(shù)保存到flash的話
#define CFG_ENV_ADDR (PHYS_FLASH_1+0x40000) 這個就是你的參數(shù)保存在flash里的起始地址了
#define CFG_ENV_OFFSET 0x40000 這個我后來看它源程序發(fā)現(xiàn)如果你上一步?jīng)]有設(shè)置它的起始地址的話就會用它來作默認(rèn)地址的了
#define CONFIG_AUTO_COMPLETE
其它地方?jīng)]有深究哦,有些好像不要也行,你就試試吧。
找到Hardware drivers部分,這應(yīng)該是網(wǎng)絡(luò)芯片設(shè)置吧,參考一下這個吧(要看芯片的):
#define CONFIG_DRIVER_RTL8019 這個就要看你的板上用的是什么網(wǎng)卡了(這個是臺灣出的,有10M)
#define RTL8019_BASE 0x06000300 這個是網(wǎng)卡相就寄存器的起始地址,有的掛在BANK4上了地址自然是0X08000300
以下部分我試過不要也行,你試下吧
#define RTL8019_BUS32 0
#define CONFIG_SMC_USE_16_BIT
#undef CONFIG_SHOW_ACTIVITY
#define CONFIG_NET_RETRY_COUNT 10 應(yīng)該是重試的次數(shù)吧
#define CONFIG_SERIAL 1
#define CONFIG_BAUDRATE 115200 設(shè)置波特率
#define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \
CFG_CMD_DATE | \
CFG_CMD_ELF | \
CFG_CMD_NET | \
CFG_CMD_EEPROM | \
CFG_CMD_I2C | \
CFG_CMD_FAT | \
CFG_CMD_JFFS2)
把CFG_CMD_EEPROM改成CFG_CMD_FLASH吧,雖然不改也是可以的,具體沒考究。
以下是板上env參數(shù)設(shè)置,看一下吧,其實我覺得了解一下就行的了,只是一些初始設(shè)置值,以后可以用命令setenv saveenv來修改的。
#define CONFIG_BOOTDELAY 3 這個就是運行bootcmd之前的等待時間
#define CONFIG_BOOTARGS "devfs=mount root=ramfs console=ttyS0,115200" 引導(dǎo)uClinux的時候傳遞的參數(shù),不會就先不用管它也行。
#define CONFIG_ETHADDR 00:50:c2:1e:af:fb 網(wǎng)卡的物理地址MAC
#define CONFIG_NETMASK 255.255.255.0 掩碼地址,設(shè)置過ip的人都應(yīng)該知道吧
#define CONFIG_IPADDR 192.168.0.30 這是你板上網(wǎng)卡8019的ip地址
#define CONFIG_SERVERIP 192.168.0.10 這是你宿主機的ip地址,以后用tftp下載的時候用到,一定要跟你的宿主機一致才行。
#define CONFIG_BOOTFILE "u-boot.bin" 這個就是你要下載文件的默認(rèn)名字,注意的是不是UBOOT編譯的文件 而是UBOOT下載以后在這個地址執(zhí)行這個文件,比如這個文件在下LINUX后就常被改成UCLINUC.BIN了
#define CONFIG_BOOTCOMMAND "bootm 0x50000" 這是bootdelay后運行的命令
Miscellaneous configurable options部分,參考一下吧:
#define CFG_LONGHELP /* undef to save memory */
#define CFG_PROMPT "TENWAY=>" 這是進(jìn)入命令模式下的提示符,改個帥一點的吧
#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
#define CFG_MAXARGS 100 /* max number of command args */
#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
#define CFG_MEMTEST_START 0x0C400000 /* memtest works on */
#define CFG_MEMTEST_END 0x0C800000 /* 4 ... 8 MB in DRAM */
#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
#define CFG_LOAD_ADDR 0x0c008000 默認(rèn)的下載地址
#define CFG_HZ 1000 /* 1 kHz */
#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } 可供選擇的波特率
Physical Memory Map部分,比較重要,修改你的sdram和flash的地址和容量。
#define CONFIG_NR_DRAM_BANKS 1 我們只占用了一個Bank用來映射sdram
#define PHYS_SDRAM_1 0x0c000000 sdram的起始地址
#define PHYS_SDRAM_1_SIZE 0x00800000 sdram的容量(8M)
#define PHYS_FLASH_1 0x00000000 flash的起始地址
#define PHYS_FLASH_SIZE 0x00200000 flash的容量(2M)
#define CFG_FLASH_BASE PHYS_FLASH_1 定義多個名字而已,其它地方會用到
注意:
存儲容量的計算方法
2M=0x00200000-----------------16進(jìn)制轉(zhuǎn)換成10進(jìn)制(用WINDOWS自帶的計算機就行)-------------------》2097152
2097152=1024*1024*2
FLASH organization部分,看注釋應(yīng)該知道了吧,參考一下:
/*-----------------------------------------------------------------------
* FLASH organization
*/
#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
#define CFG_MAX_FLASH_SECT 256 /* 最大支持的SECTOR數(shù)量,另外SAM FEI的補丁這里設(shè)置了32個 是錯誤的*/
//#define CFG_MAIN_SECT_SIZE 0x10000 /* main size of sectors on one chip */
#define CFG_FLASH_ERASE_TOUT 4120000 /* Timeout for Flash Erase (in ms) 在前面加個4讓它長點 */
#define CFG_FLASH_WRITE_TOUT 1000 /* Timeout for Flash Write (in ms) */
其他地方還沒動 以后動的再補上
UBOOT 移植操作(3)
----------------------------------------------------------------------------------------------------
-----------------------------------board/myboard/common/flash.c-----------------------------------
----------------------------------------------------------------------------------------------------
找到這個函數(shù):write_buff
里面有這句話,一共有6處吧?全改了:#ifdef CONFIG_B2
把CONFIG_B2改成上面TT.H文件里面起的名,我的叫CONFIG_TT
關(guān)于FLASH的一點疑問:
一直懷疑29LV160和39LV160在U BOOT下是否兼容的問題
看了這段程序后似乎U BOOT是可以自動檢測的
----------------------------------------------------------------------------------------------------
-----------------------------------board/T2T/TT/memsetup.S-----------------------------------
-----------------------------------也叫board/T2T/TT/lowlevel_init.S-----------------------------------
----------------------------------------------------------------------------------------------------
按照如下改
* Bank 0 parameter */
.equ B0_Tacs, 0x3 /* 0clk */
.equ B0_Tcos, 0x3 /* 0clk */
.equ B0_Tacc, 0x7 /* 14clk */
.equ B0_Tcoh, 0x3 /* 0clk */
.equ B0_Tah, 0x3 /* 0clk */
.equ B0_Tacp, 0x1 /* 0clk */
.equ B0_PMC, 0x0 /* normal(1data) */
/* Bank 1 parameter */
.equ B1_Tacs, 0x0 /* 4clk */
.equ B1_Tcos, 0x1 /* 4clk */
.equ B1_Tacc, 0x2 /* 14clkv */
.equ B1_Tcoh, 0x1 /* 4clk */
.equ B1_Tah, 0x0 /* 4clk */
.equ B1_Tacp, 0x0 /* 6clk */
.equ B1_PMC, 0x0 /* normal(1data) */
/* Bank 2 parameter - */
.equ B2_Tacs, 0x0 /* 4clk */
.equ B2_Tcos, 0x2 /* 4clk */
.equ B2_Tacc, 0x4 /* 14clk */
.equ B2_Tcoh, 0x2 /* 4clk */
.equ B2_Tah, 0x3 /* 4clk */
.equ B2_Tacp, 0x3 /* 6clk */
.equ B2_PMC, 0x0 /* normal(1data) */
/* Bank 3 parameter */
.equ B3_Tacs, 0x3 /* 4clk */
.equ B3_Tcos, 0x3 /* 4clk */
.equ B3_Tacc, 0x7 /* 14clk */
.equ B3_Tcoh, 0x3 /* 4clk */
.equ B3_Tah, 0x3 /* 4clk */
.equ B3_Tacp, 0x3 /* 6clk */
.equ B3_PMC, 0x0 /* normal(1data) */
/* Bank 4 parameter */
.equ B4_Tacs, 0x3 /* 4clk */
.equ B4_Tcos, 0x3 /* 4clk */
.equ B4_Tacc, 0x7 /* 14clk */
.equ B4_Tcoh, 0x3 /* 4clk */
.equ B4_Tah, 0x3 /* 4clk */
.equ B4_Tacp, 0x3 /* 6clk */
.equ B4_PMC, 0x0 /* normal(1data) */
/* Bank 5 parameter */
.equ B5_Tacs, 0x0 /* 4clk */
.equ B5_Tcos, 0x1 /* 4clk */
.equ B5_Tacc, 0x4 /* 14clk */
.equ B5_Tcoh, 0x1 /* 4clk */
.equ B5_Tah, 0x0 /* 4clk */
.equ B5_Tacp, 0x0 /* 6clk */
.equ B5_PMC, 0x0 /* normal(1data) */
/* Bank 6(if SROM) parameter */
.equ B6_Tacs, 0x3 /* 4clk */
.equ B6_Tcos, 0x3 /* 4clk */
.equ B6_Tacc, 0x7 /* 14clk */
.equ B6_Tcoh, 0x3 /* 4clk */
.equ B6_Tah, 0x3 /* 4clk */
.equ B6_Tacp, 0x3 /* 6clk */
.equ B6_PMC, 0x0 /* normal(1data) */
/* Bank 7(if SROM) parameter */
.equ B7_Tacs, 0x3 /* 4clk */
.equ B7_Tcos, 0x3 /* 4clk */
.equ B7_Tacc, 0x7 /* 14clk */
.equ B7_Tcoh, 0x3 /* 4clk */
.equ B7_Tah, 0x3 /* 4clk */
.equ B7_Tacp, 0x3 /* 6clk */
.equ B7_PMC, 0x0 /* normal(1data) */
/* Bank 6 parameter */
.equ B6_MT, 0x3 /* SDRAM */
.equ B6_Trcd, 0x1 /* 2clk */
.equ B6_SCAN, 0x0 /* 8bit */
.equ B7_MT, 0x3 /* SDRAM */
.equ B7_Trcd, 0x1 /* 2clk */
.equ B7_SCAN, 0x0 /* 8bit */
/* REFRESH parameter */
.equ REFEN, 0x1 /* Refresh enable */
.equ TREFMD, 0x0 /* CBR(CAS before RAS)/Auto *** */
.equ Trp, 0x0 /* 2clk */
.equ Trc, 0x3 /* 0x1=5clk 0x3=11clk*/
.equ Tchr, 0x0 /* 0x2=3clk 0x0=0clks */
.equ REFCNT, 1550
MEMORY_CONFIG:
.long 0x01000102 /* Bank0 = OM[1:0] , Bank1-2 4-7 16bit, ,BANK3 8BIT,Bank2=Nowait,UB/LB*/
.word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) /*GCS0*/
.word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) /*GCS1*/
.word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) /*GCS2*/
.word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) /*GCS3*/
.word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) /*GCS4*/
.word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) /*GCS5*/
.word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) /*GCS6*/
.word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) /*GCS7*/
.word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) /*REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1019*/
.word 0x10 /*SCLK power down mode, BANKSIZE 16M/16M*/
.word 0x20 /*MRSR6 CL=2clk*/
.word 0x20 /*MRSR7*/
主要是設(shè)置MEMORY_CONFIG里的內(nèi)容 值得注意的是.long 0x01000102 /* Bank0 = OM[1:0] , Bank1-2 4-7 16bit, ,BANK3 8BIT,Bank2=Nowait,UB/LB*/中設(shè)置了各個BANK的位寬,要注意。因為8019有8位的,有16位的,配置錯了網(wǎng)絡(luò)不通
其實就是一些字
有人從地址讀出來后是下面這樣也可以
“
MEMORY_CONFIG:
.long 0x11010102
.long 0x600
.long 0x7ffc
.long 0x7ffc
.long 0x7ffc
.long 0x7ffc
.long 0x2610
.long 0x18000
.long 0x18000
.long 0x960459
.long 0x10
.long 0x20
.long 0x20
由于對armsys硬件不是太了解,沒有辦法,只得看armsys bootloader程序,但每個版本又有差別.因此是用AXD調(diào)試看bootlaoder啟動后0x1c80000中的值定的.
”
注意:這個注意是后補上的,因為自己和朋友在做的時候發(fā)現(xiàn)網(wǎng)上對這部分分析的人特別少,可能因為理論比較簡單,操作起來又比較麻煩吧。
聽聽菜鳥的方法吧。
首先U BOOT1.1.1和1.1.4版本有個小差別,就是文件名的差別1.1.1叫memsetup.S,1.1.4叫l(wèi)owlevel_init.S如果把別人用1.1.1編譯的直接拿過來也可以,但一定記得在改文件名的同時還一定要在文件里改函數(shù)名!就是這個文件最后那部分匯編上面的函數(shù)名。不然后來會提示START.S里找不到lowlevel_init。切記
另外,比較重要的這部分究竟代表什么,怎么改。
這個文件實際分3部分,這3個部分實際又是把44B0初始化那幾個匯編文件重新組合了,就是ADS在RAM里調(diào)試文檔里說的,把44B0當(dāng)單片機用時C語言前面的那寫匯編文件,一般說來包括44binit.s MEMCFG.S 44BLIB_A.S Option.s。其中44binit.s MEMCFG.S就包含了內(nèi)存初始化的參數(shù),按照這兩個文件改吧。
再說這3部分
開始是內(nèi)存設(shè)置,在數(shù)據(jù)手冊(英文)4-14頁,各個意思就不多說了。說說怎么改,當(dāng)然得根據(jù)你的內(nèi)存具體改(一句廢話)但是有簡單的方法,前面提到了,看MEMCFG.S這個文件。
然后是一些移位只類的操作,把各個BANK設(shè)置好,其實就是設(shè)置一些預(yù)定義的字,然后在其他的地方利用這些字設(shè)置寄存器。就把這些理解為宏或者就當(dāng)是個結(jié)構(gòu)體吧(不準(zhǔn)確,就幫助理解)。為什么這么設(shè)置看看數(shù)據(jù)手冊(英文)4-13頁
這部分在怎么改的快?找,哪找?44binit.s里面有,一模一樣,不羅嗦了。
最后那部分是這個文件唯一執(zhí)行的部分
基本不需要改吧(除了有的時候函數(shù)名:))
看見0X01C80000還不明白嗎?看數(shù)據(jù)手冊(英文)4-3頁去吧,有匯編的例子,至于這個32位寄存器為什么這么設(shè)置。
別看我這裝的明白,就是會對付,別跟我較真,我還也在研究中:)
注意:順便在這里說說個小問題,有朋友問“為什么原理圖上地址線從A1開始,而不是A0”看數(shù)據(jù)手冊(英文)4-4頁,因為是16位地~~~
注意:我的8019是連在BANK3上的 而且是8BIT的 所以MEMORY_CONFIG下面第一項里要做設(shè)置 要不不好使
----------------------------------------------------------------------------------------------------
-----------------------------------board/T2T/TT/config.mk-----------------------------------
----------------------------------------------------------------------------------------------------
修改最后的TEXT_BASE為把UBOOT加載到RAM的地址,這里添0XC700000,當(dāng)然添0XC300000也可以 但是如果添0XC300000之前的似乎在下載LINUX的時候會死機,因為地址空間不夠
-----------------------------------------------------------------
-----------------------------------cpu/s3c44b0/start.S------
-------------------------------------------------------------------
找到
#if CONFIG_S3C44B0_CLOCK_SPEED==60
ldr r0, =0x70081 /* 60MHz (Quartz=10MHz) 具體怎么算的 可以看我寫的計算方法說明*/
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
ldr r0, =0xac042 /* 75MHz */
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
設(shè)置一下主頻
------------------------------------------------------------------------------
--------------cpu/s3c44b0/serial.c-----------------------------------
--------------------------------------------------------------------------------
找到以下幾項
主要是把頻率改一下并把分拼設(shè)置對
void serial_setbrg (void)
{
DECLARE_GLOBAL_DATA_PTR;
u32 divisor = 0;
/* get correct divisor */
switch(gd->baudrate) {
case 1200:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
divisor = 3124;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
divisor = 3905;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
break;
case 9600:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
divisor = 390;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
divisor = 487;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
break;
case 19200:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
divisor = 194;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
divisor = 243;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
break;
case 38400:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
divisor = 97;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
divisor = 121;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif break;
case 57600:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
divisor = 64;
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
divisor = 80;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif break;
case 115200:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
divisor = 32;/*具體算法和上面主頻算法在一個文檔里*/
#elif CONFIG_S3C44B0_CLOCK_SPEED==75
divisor = 40;
#else
# error CONFIG_S3C44B0_CLOCK_SPEED undefined
#endif
--------------------------------------------------------------------------
---------board/T2T/TT/TT.C-------------------------------
------------------------------------------------------------
這個沒什么好說的,如果你用的是網(wǎng)上流行的原理圖,改動基本沒有,我的因為加了些東西,所以這個文件改動很多。
但文件里主要就是對44B0各個管腳設(shè)置,哪個是IO哪個是TXD、RXD。不多說了,自己看數(shù)據(jù)手冊8-6頁,有點耐心。
---------------------------------------------------------------------
------------lib_arm/board.c-----------------------------------
---------------------------------------------------------
好象網(wǎng)卡需要加個INCLUDE
//待補充
這個文件不用修改,在網(wǎng)上找的講解,順便提一下
進(jìn)行各種初始化設(shè)置,主要有:
cpu_init CPU相關(guān)的設(shè)置, 具體在./cpu/s3c44b0/cpu.c中.
board_init 板子相關(guān)的設(shè)置, 具體在board/wx/wx20/wx20.c 中
interrupt_init中斷設(shè)置,我們沒有用,具體在./cpu/s3c44b0/interrupts.c中
env_init 初始化環(huán)境變量, 具體要看用什么介質(zhì)來存儲環(huán)境變量,如果用flash來存貯, 程序在common/env_flash.c中.
init_baudrate 設(shè)置baud參數(shù)
serial_init 串口初始化, 具體在cpu/s3c44b0/serial.c.
console_init_f 控制臺設(shè)置, 具體在./common/console.c
display_banner 顯示標(biāo)題.[這里可以鼓搗一下,讓它輸出些個性的東西:)]
dram_init 可用內(nèi)存配置, 具體在./board/wx/wx20/wx20.c.
flash_init flash初始化,具體./drivers/cfi_flash.c.
接下來就是環(huán)境變量初始化, 網(wǎng)絡(luò)初始化,最后到main_loop,可以運行各種命令.
====================================
[5]燒寫FLASH
這部分可能過于簡單,很少有人寫,但是對于不了解ARM開發(fā)過程的人真的簡單嗎?我是菜鳥,在這卡了3天:)
一般說來有幾種方法,
1)板子原來的BOOTLOADER程序或者為燒寫而編寫的專用ADS程序
比較高級而快速的方法,很多現(xiàn)成的開發(fā)板都用這種方法(相對來說有實力的公司),此狀態(tài)下CPU是運行的,所以速度快。
比如ZLG的,但是對于初學(xué)或者不準(zhǔn)備細(xì)研究硬件的人來說就比較麻煩,因為要編寫(改寫)ADS燒寫程序。愿意的人可以看看。
2)FLUTED
和FLASHPGM一樣,使用的好象叫邊界掃描法,CPU此時并不運行,因此燒寫的比較慢。
在這里也不推薦FLUTED這個軟件,原因比較簡單,麻煩+速度慢。
因為需要編寫(改寫)兩個配置文件,而且是字符界面。倒是有人說這個軟件只能在WIN98下用的說法好象不對(現(xiàn)在有可以讓2000和XP下用的方法)
喜歡的朋友可以用用
3)FLASHPGM(推薦)
很簡單的程序,GUI界面,速度尚好。
設(shè)置很簡單,在CPU里選對型號,當(dāng)然是3星的44B0。在FLASH里也一樣,39LV160,29LV160都有。
確定好地址,RAM地址我的是0XC000000(BANK7上) FLASH地址0X0(BANK0上)
選完了以后讀一下FLASH的ID(左下腳的按鈕吧)能讀出廠家的ID就行。
然后是燒寫了,PROGRAME按鈕,注意的是FLASHPGM不支持BIN格式,按照下面方法處理。
再有就是盡量在寫之前擦一下,PROGRAME菜單里有個選項,打個鉤就OK。
具體燒寫方法可以看我總結(jié)的另一篇文檔,在這里只說說UBOOT相關(guān)的。
前面說過UBOOT編譯以后產(chǎn)生3個文件
u-boot——ELF格式的文件,可以被大多數(shù)Debug程序識別;
u-boot.bin——二進(jìn)制bin文件,純粹的U-BOOT二進(jìn)制執(zhí)行代碼,不保存ELF格式和調(diào)試信息。這個文件一般用于燒錄到用戶開發(fā)板中;
u-boot.srec——Motorola S-Record格式,可以通過串行口下載到開發(fā)板中。
FLASHPGM不支持BIN格式的,可以燒寫u-boot——ELF格式的文件,別看它沒擴(kuò)展名,一樣燒寫。
還有,如果你懶(和我一樣),拿別人現(xiàn)成的BIN文件來燒,F(xiàn)LASHPGM還提供了一個BINTOS19的程序,就在它的安裝目錄下。具體用法運行它,它自己就告訴你了。
注意:有時(尤其是FLASH里已經(jīng)有程序的時候)0XC000000會莫名奇妙的提示內(nèi)存不可以寫,有幾個方法可以試試:把地址改成0x10000000(好象是緩存地址),之后點EREASE擦除芯片,擦除一般說來是不成功的,最后無論如何都下不去,沒關(guān)系,這時候關(guān)閉擦除對話框,然后0x10000000地址不變,燒FLASH,我一般是燒寫一個我自己寫的LED測試小程序把內(nèi)存占上:)?;貋磉@時候再把0X1000000換成0XC000000再按照正常操作,一般可以正常。
這現(xiàn)象的原因就是過去下的程序(多數(shù)是不正確的程序)正在運行 占用了RAM與ROM,下個LED測試小程序就是把這幾個部分清除掉。
如果以上方法還不正常,可以用另一個程序叫FLASHP就差2個字母:)很好!在這里對這個程序的作者致敬?。?br />用這個軟件擦FLASH,然后再用FLASHPGM燒,原因是FLASHP擦厲害,但寫好象有些問題~~
細(xì)小的問題--patch命令的使用
有的時候大家收到的別人移植好的UBOOT了UCLINUC了是以patch包發(fā)布的
這里轉(zhuǎn)個寫的比較好的patch命令的使用方法
文件:isp1161-2.6.12.patch(在/root下)
--- linux-2.6.12/drivers/usb/Makefile 2005-06-17 22:48:29.000000000 +0300
+++ linux-2.6.12-new/drivers/usb/Makefile 2005-07-27 08:11:47.908336540 +0300
......
......
由于patch文件的首行已經(jīng)指明了路徑,所以根據(jù)當(dāng)前所在的目錄,加不同的參數(shù)使用patch命令:
1:如果當(dāng)前的目錄是和linux-2.6.12的同級目錄:
[root@kcn-110mw]#patch -p0 </root/isp1161-2.6.12.patch
2:如果當(dāng)前的目錄為 linux-2.6.12/:
[root@kcn-110mw]#patch -p1 </root/isp1161-2.6.12.patch
3:如果當(dāng)前的目錄為 linux-2.6.12/drivers/:
[root@kcn-110mw]#patch -p2 </root/isp1161-2.6.12.pathc
0,1,2,是指略去的patch文件中的前幾級目錄
細(xì)小的問題---VMWARE安裝與使用
mamajinco 發(fā)表于 2006-9-6 9:49:00
首先 推薦大家在開發(fā)的過程中使用VMWARE虛擬機 安裝LINUX
原因比較簡單 開發(fā)過程中會頻繁的在兩個系統(tǒng)之間交換 對于沒有兩個計算機的朋友來說 過于麻煩
對的不說了 說說開發(fā)里遇到問題
==================================
一 安裝VMWARE虛擬機與LINUX
1 分出個10G左右的地方
我是分個10G的FAT32格式分區(qū)來單獨做LINUX的區(qū)域,推薦分出來的空間大于9G,因為對于新手來說LIXUN要盡量全部安裝。
分區(qū)盡量是FAT32格式(WINDOWS用的)NTFS聽有的朋友說過好象有問題。
推薦計算機內(nèi)存大于256M,我用的是512M,開VMWARE再開ACROBAT時就會明顯慢。
安裝后的VMWARE虛擬機基本是3種文件,VMWARE程序文件我安在C盤下了,VMWARE的配置文件(安裝后再添加的,比較?。┖蚔MWARE虛擬出的硬盤文件(選10G,該文件就是10G),所以我單獨分出個驅(qū)存他們。
虛擬機里安裝后的操作系統(tǒng)(一般都是LINUX吧,順便說一下,你也可以按WIN了蘋果了操作系統(tǒng))
2 安裝VMWARE虛擬機
VMWARE虛擬機對于WINDOWS來說就是個軟件,用這個軟件虛擬出個計算機來。對于VMWARE虛擬機里面安裝的系統(tǒng)來說自己就獨占了一臺計算機。
安裝沒有什么特殊的,我用的是VER5.5,選標(biāo)準(zhǔn)安裝,基本一律下一步就搞定。
值得注意的是中間有問你分出來多大硬盤空間,默認(rèn)是8G ,改成10G吧。
之后是建立VMWARE虛擬機配置文件,根據(jù)自己的要求建立,基本不用改什么,就是整錯了也可以在后來的SETTING里改。
不多說了。
3 安裝LINUX
把LINUX安裝盤放光驅(qū)里吧,啟動虛擬機,自己就檢測啟動了。
多說一句,到這大家都明白了吧?啟動虛擬機就相當(dāng)于啟動一個計算機,光盤自動啟動也跟物理上的計算機完全一樣。
值得注意的是:如果電腦里安了虛擬光驅(qū)可能影響光盤自動啟動,如果有問題就把虛擬光驅(qū)卸了吧。
安裝的時候同樣沒什么問題,手動分驅(qū),按照內(nèi)存大小的2倍分出來個SWAP分驅(qū),其余的我分成一個驅(qū),強制為主分驅(qū),掛載點選“/”根目錄,分驅(qū)格式選EXT3……
多說一句,在分驅(qū)里就能看出來了吧?LINUX完全獨占了這10G的地方,看不到WINDOWS
二 安裝VMWARE-tools
VMWARE-tools還是安裝比較好,最起碼WIN和LINUX交換文件就方便了
引用別人的文章 加上自己的注釋吧
1、以ROOT身份進(jìn)入LINUX
2、按下 CTRL+ALT組合鍵,進(jìn)入主操作系統(tǒng),點擊VMWARE狀態(tài)欄安裝提示,或者點擊 SETTING菜單下的ENABLE VMWARE TOOLS子菜單。
3、確認(rèn)安裝VMWARE TOOLS。
這時我們并沒有真正的安裝上了VMWARE TOOLS軟件包,如果您點擊菜單:DEVICES,您就會發(fā)現(xiàn)光驅(qū)的菜單文字變?yōu)椋篿de1:0-> Crogram FilesVMwareVMware WorkstationProgramslinux.iso,這表示VMWARE將LINUX的ISO映象文件作為了虛擬機的光盤
注釋:有的時候不能自動掛載,自己要在菜單里光驅(qū)項目里選掛載VMWARE安裝目錄(不是配置文件存儲目錄,我的在C盤里)里某個目錄的linux.iso
4、鼠標(biāo)點擊LINUX界面,進(jìn)入LINUX。
5、運行如下命令,注意大小寫。
mount -t iso9660 /dev/cdrom /mnt
加載CDROM設(shè)備,這時如果進(jìn)入 /mnt 目錄下,你將會發(fā)現(xiàn)多了一個文件:vmware-linux-tools.tar.gz。這就是WMWARE TOOLS的LINUX軟件包,也就是我們剛才使用WINISO打開LINUX.ISO文件所看到的。
注釋:在新版本里可以不用命令掛載和卸載了,打開 LINUX.ISO后LINUX桌面會自動彈出光驅(qū)標(biāo)志,雙擊打開。
cp /mnt/vmware-linux-tools.tar.gz /tmp
將該軟件包拷貝到LINUX的 TMP目錄下。
umount /dev/cdrom
卸載CDROM。
cd /tmp
進(jìn)入TMP目錄
tar zxf vmware-linux-tools.tar.gz
解壓縮該軟件包,默認(rèn)解壓到vmware-linux-tools目錄下(與文件名同名)。
cd vmware-linux-tools
進(jìn)入解壓后的目錄
./install.pl
運行安裝命令。
這時install提示你是否需要備份以前的配置文件,建議選擇"y"。
等待INSTALL運行完成后,這時鍵入 START 命令,是不是可以看到漂亮的LINUX圖形界面了?
三 使用VMWARE TOOLS
必須注意的是VMWARE TOOLS在每次重起LINUX之后還必須也重起一下,TMD,誰搞定不用重起告訴我一聲
重起的方法:/etc/init.d/vmware-tools restart
就有消息出來了
四 文件共享
我用的VMWARE虛擬機裝的LINUX,要在LINUX和WIN中間傳遞文件用VM-》SETTING里的SHARE FOLDER
該功能是把WIN 下的一個文件夾共享給LINUX。
這個功能必須裝VMWARE TOOLS才能用。
共享以后在LINUX的MNT目錄下就出一個F什么打頭的文件夾,進(jìn)去就是你共享的文件夾名了
細(xì)小的問題---arm-linux-gcc與arm-elf-gcc的區(qū)別
總看見有人問
arm-linux-gcc為有MMU的LINUX準(zhǔn)備的比如2410上的LINUX
arm-elf-gcc為沒有MMU的UCLINUX準(zhǔn)備的比如44B0上的UCLINUX
就這么簡單
閑聊ARM的入門(1)
我的筆記剛公布就有很多朋友來找我,把我當(dāng)高手,問我“ARM怎么入門”。我不是高手,仍然是菜鳥。
但是回想起自己當(dāng)時的迷茫,特意寫了這篇東西,當(dāng)作給和我一樣的兄弟姐妹的幫助吧。問這個問題的人多半不是已經(jīng)工作的工程師,而是和我一樣是學(xué)生,所以這篇筆記就把看家當(dāng)成我一樣的菜鳥,高手勿怪。
首先聲明:本人還沒有找工作,事實上處于研究生剛畢業(yè),還沒開始找工作的空閑時間,44B0只是興趣所在,打發(fā)時間。
所有看法完全是自己的感受,不代表任何他人。錯了的觀點各位幫我糾正。
再次補充:很多朋友看了上面的話就問我為什么研究生畢業(yè)了還不找工作:)說是打發(fā)時間,其實是因為研究生的時候帶了一個項目,申請?zhí)崆爱厴I(yè)以后項目還有塊尾巴,答應(yīng)導(dǎo)師把項目做完再走:)就這么簡單。男人總點負(fù)點責(zé),呵呵
以下問題常被問到,我就想到哪說到哪吧。
一 首先說說ARM的發(fā)展
可以用一片大好來形容,翻開各個公司的網(wǎng)站,招聘里面嵌入式占據(jù)了大半工程師職位。
廣義的嵌入式無非幾種:傳統(tǒng)的什么51、AVR、PIC稱做嵌入式微控制器;ARM是嵌入式微處理器;DSP;FPGA。
客觀的講,工作需求量上DSP的需求比ARM要多,而ARM和FPGA差不多。
DSP因為數(shù)字處理與通信領(lǐng)域的空前發(fā)展而火暴,小到MP3 射象頭,大到我們軍品里的控制器,應(yīng)用面很廣。
FPGA的兄弟一般做ANSIC(特殊芯片設(shè)計,好象是這么翻譯的)。
而ARM單純說來并不比一個單片機強多少,但是它的獨特就在于不斷下降的價格和提升的性能。這完全依靠于ARM公司的戰(zhàn)略,厲害!!很佩服他們的戰(zhàn)略眼光?。?br />值得注意的是:在找工作中,企業(yè)(著名的,小的不算)對單純的ARM硬件開發(fā)工程師并不比單片機重視,很少有大企業(yè)的職位里寫“從事過ARM開發(fā)優(yōu)先”。
寫的多的是什么?“嵌入式LINUX”
到這相信大家看出來了吧,需要的是硬件中的軟件。
二 ARM是硬件還是軟件
很難說,ARM是硬件,LINUX是軟件。
ARM的硬件多半已經(jīng)模塊化了,像我這樣把板子改成這樣的就算動的多的了,這同樣是ARM公司的戰(zhàn)略,再次佩服。
實際中的LINUX的開發(fā)工作更多,更耗時。從這方面說ARM應(yīng)該算是軟件了。
在找工作中更是這樣,舉個例子,聯(lián)想里和ARM最接近的是“BIOS工程師”是軟件,MOTO里接近的是嵌入式LINUX工程師是軟件。而其他很多公司把嵌入式產(chǎn)品開發(fā)歸為硬件。
所以,不要討論這個,好好玩轉(zhuǎn)自己的板子才是關(guān)鍵。實在不爽你就把自己叫“嵌入式開發(fā)工程師”
三 要不要買開發(fā)板 買哪家
我的答案是“在你個人的學(xué)習(xí)方法”,但是如果看家是需要看這騙筆記的水平,個人推薦還是買現(xiàn)成的。
1 買
買板子可以把注意力集中在軟件開發(fā)上,軟件開發(fā)(尤其是驅(qū)動)可以不必?fù)?dān)心自己硬件上的問題,我就是以便調(diào)試一邊寫驅(qū)動和程序,每次寫驅(qū)動前就要先確認(rèn)硬件沒問題。
另外,買板子更省錢和時間,我自己做的板子,原理圖PCB花了2周以上!制版又15天,回來以后焊接44B0 160個腳!那叫一個麻煩~~花了多少錢呢?2層板,制版費就300塊!當(dāng)然 我把接口都外引了,還做了個20X18的LCD背板,板子比較大。
總體下來 元件+LCD屏+PCB=11XX塊!夠2410的了。
再有就是買的資料相對來說比較全,但是不要指望有技術(shù)支持!都是騙人的,賣你之后就不會理你。
2 做
自己做可以更了解底層硬件,可以按照自己的要求加?xùn)|西,比如我就加了GPS模塊、 GPRS模塊 、SD卡模塊,擴(kuò)了個IIC的35個鍵子的鍵盤、把LCD接口按照買的LCD改裝了,可以用FPC線直接連接。做的很爽的。玩一把嗎。
當(dāng)然,你可以有策略的做,比如像我一樣,把RAM和ROM,網(wǎng)絡(luò)都保持和某現(xiàn)成的板子一樣,這樣他們的資料你就可以拿過來直接用,給自己留個退路。其他的如SD了 什么的自己做。都達(dá)到了~~就是費錢,費時間。
再有就是給做的朋友幾點建議:盡量拿到現(xiàn)成的板子,盡量多搜集其他板子的全套資料,一定要拿到一張沒問題的原理圖。
網(wǎng)上流傳的原理圖多數(shù)是龔俊03年畫的,再這里對龔俊表達(dá)一下我的敬意!!牛人!
但是那個圖有個小BUG,我指的是03版的,后來的沒這問題了。8019那地址線和地址有問題。還有人仿照他的PDF圖畫的SCH,更是漏洞百出!譴責(zé)!順便譴責(zé)把龔俊板子偷賣的人。
3 買哪家
個人感覺分3類吧
1)首先是ZLG的,資料非常的全,感覺他是真正想教你怎么開發(fā)ARM,而不是像有的公司自己技術(shù)都沒做好就做個板子出來賣錢。但是最大的不利就是價格太貴!而且主要是PHILIP的,貨源比較麻煩~~可能有人說21XX系列的不貴啊,那是總線不外擴(kuò)的,只能跑UCOS,不能跑UCLINUX。但是說是話,21XX系列才是ARM7的價格性能結(jié)合點。ARM7最適合做工業(yè)控制,ARM普及,銷量都是怎么來的?都是ARM7來的,而44B0是典型的商業(yè)片子。但是,這里如果你看中的是為工作做準(zhǔn)備,還是選能跑UCLINUX的吧。
但是仍然作為第一個推薦,因為菜鳥時期,合適的資料太重要了??!在這里被ZLG的務(wù)實精神感動!你看人家那代碼寫的。
2)感覺立宇泰的44B0不錯
硬件沒別的,就是資料比較全的說,不像有些家,原理圖直接拿人家的,還錯的~~
3)找個最便宜的
好象最便宜的有賣350的吧?也是沒別的,就是即省了錢 還省時間搜集資料,至于資料全不全,別計較了~~硬件肯定好使就行吧。
四 要不要有51 AVR等單片機基礎(chǔ)
有更好,但沒有也無所謂。
兩個月以前,我只是看別人做,耳濡目染~~,本科學(xué)過單片機,從來沒做過。我們這的技術(shù)主干做AVR和51,我就跟他們調(diào)過C語言程序。你看出來了?我是個不折不扣的菜鳥吧?
但是做這個之前我特意找了ZLG的兩本書,看了里面的例子和原理圖,這很重要。例程里有匯編有C,都看懂了就OK,不用自己現(xiàn)寫
五 開發(fā)都需要學(xué)習(xí)哪些軟件
總結(jié)起來最主要的有以下幾個吧
1 ADS調(diào)試用
確切的說是ADS+AXD。ADS里包含AXD。原來都用SDT后來ARM公司停止對SDT支持了,改支持ADS了,還是用ADS吧。
有的人的程序發(fā)布的仍然是SDT版本的,但基本都可以找到相應(yīng)ADS的,新人在這里不要發(fā)蒙。ADS是編譯器,AXD是調(diào)試器。便宜成AXF以后再在ARM的RAM里調(diào)試。
2 PLASHPGM
FLASH燒寫的軟件。AXD在RAM里調(diào)試,掉電就沒有了,方便程序修改。調(diào)試好的程序再下到FLASH里,上電直接運行。
同類的軟件還有很多,什么FLUTED了、FLSHP了都是,但FLASHPGM最好,要是有人還問FLASH不支持BIN格式文件的問題就要看我寫的PLASHPGM使用了。
3 BANYANT調(diào)試代理(不知道名對不,起這么個難記的,我一般都叫它“半羊”因為知道它那幾