嵌入式linux應(yīng)用開發(fā)圖書學(xué)習(xí)手冊v_第1頁
嵌入式linux應(yīng)用開發(fā)圖書學(xué)習(xí)手冊v_第2頁
嵌入式linux應(yīng)用開發(fā)圖書學(xué)習(xí)手冊v_第3頁
嵌入式linux應(yīng)用開發(fā)圖書學(xué)習(xí)手冊v_第4頁
嵌入式linux應(yīng)用開發(fā)圖書學(xué)習(xí)手冊v_第5頁
已閱讀5頁,還剩245頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

qwertyuiopasdfghjklzxcvbnmqwertycvbnmqwqwertyuiwertyuioopasdfghiopasdfgqwertyuiopasdfghjklzxcvbnmqwertycvbnmqwqwertyuiwertyuioopasdfghiopasdfgbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuionmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmrtyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfgLinux學(xué)習(xí)手冊u-boot-2012.10、Linux3.6.7、Qtopia4.4.32013-1-29目錄縱觀本書 11章1.11.2Makefile的基本知識 2Makefile規(guī)則 2Makefile變量 ...6變量的 方式 2遞歸方式擴(kuò)展的變量 2直接展開式變量 3條件賦值 3變量的替換目錄縱觀本書 11章1.11.2Makefile的基本知識 2Makefile規(guī)則 2Makefile變量 ...6變量的 方式 2遞歸方式擴(kuò)展的變量 2直接展開式變量 3條件賦值 3變量的替換 4追加變量值 41.3Makefile函數(shù) .2addprefix 5addsuffix 52章2.1u-boot-2012.10移植之準(zhǔn)備工作 6安裝交叉編譯工具 62.1.1安裝步驟 62.22.3Linux操作基本命令 6刪除與修改 72.3.1刪除與s3c6410無關(guān)文件 72.42.53章3.14章4.14.25章5.15.26章6.17章7.18章8.19章9.19.2初步修改文件 8CRT工具 1012硬件初始化 12移植之NandFlash 41NandFlash啟動(dòng) 41u-boot-2012.10移植之網(wǎng)卡驅(qū)動(dòng) 61DM9000網(wǎng)卡驅(qū)動(dòng)移植 61支持TFTP 63移植之USB驅(qū)動(dòng) 64USB驅(qū)動(dòng) 64移植之MMC驅(qū)動(dòng) 70MMC驅(qū)動(dòng) 70移植之添加u-boot命令 72小試u-boot命令 72config 74mkimage 74配置config 7510章10.1LoadAddress和EntryPoint的分析 81210.211章11.112章12.113章13.113.2LoadAddress和EntryPoint的修改 82Linux3.6.7移植之內(nèi)核分區(qū) 88內(nèi)核分區(qū) 88NandFlash10.211章11.112章12.113章13.113.2LoadAddress和EntryPoint的修改 82Linux3.6.7移植之內(nèi)核分區(qū) 88內(nèi)核分區(qū) 88NandFlash驅(qū)動(dòng) 90NandFlash驅(qū)動(dòng) 90Linux3.6.7移植之根文件系統(tǒng) 9898制作根文件系統(tǒng) makeconfig進(jìn)行配置 106制作mkyaffs2image工具 109制作根文件系統(tǒng) 11013.314章14.115章15.115.2NFS文件系統(tǒng)掛載 121Hello程序 129131板程序 131Linux中的LED驅(qū)動(dòng)程序 15.2.415.2.515.2.615.2.715.2.815.2.9頭文件 133寄存器地址 134open函數(shù) 135函數(shù) 136write函數(shù) 136release函數(shù) 137file_operations結(jié)構(gòu)體 138模塊的加載和卸載 138測試程序 13915.316章16.116.217章17.117.218章19章19.420章20.1Linux字符驅(qū)動(dòng)之LED(二) 140148DS18B20原理分析 148DS18B20驅(qū)動(dòng)程序 148LinuxADCLinuxADC 159寄存器簡介 159驅(qū)動(dòng)ADC程序 160Linux3.6.7驅(qū)動(dòng)之常見問題 168模塊證168卸載驅(qū)動(dòng)模塊 168段錯(cuò)誤 168QT移植之搭建編譯環(huán)境 172tslib的配置 172編譯QT4.4.3 173QT啟動(dòng)錯(cuò)誤 175LCD觸摸屏移植 177QTCreator 185320.221章21.122章21章21.122章22.122.223章23.123.224章24.124.225章25.126章26.127章27.128章28.129章29.129.230章31章31.132章32.1編譯Hello 187HelloWorld程序 189QT移植之信號與槽 194信號與槽機(jī)制194信號與槽程序 195QT移植之組件布局 199絕對定位和布局定位 199布局定位實(shí)例 199QT移植之窗口 201QMainWindow窗口分布 201QMainWindow窗口程序 201移植之QMessageBox 215QMessageBox簡介 215QT移植之Q*Dialog 217常用框 217QT移植之為QT4.4.3添加應(yīng)用程序 219添加應(yīng)用程序 219植之LED應(yīng)用程序 222LED應(yīng)用程序設(shè)計(jì) 222QT移植之ADC應(yīng)用程序 225ADC驅(qū)動(dòng)程序 225ADC應(yīng)用程序設(shè)計(jì) 228安裝QWT 231Qwt的安裝 231QWT的應(yīng)用 233QT移植之DS18B20應(yīng)用程序 241Qt界面應(yīng)用程序 241GPRS模塊 247常見函數(shù) 2474、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com縱觀書書本書1章為Makefile基礎(chǔ)知識;291419328章為u-boot-2012.10移植;13章為Linux3.6.7移植;、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com縱觀書書本書1章為Makefile基礎(chǔ)知識;291419328章為u-boot-2012.10移植;13章為Linux3.6.7移植;18章為Linux驅(qū)動(dòng);31章為Qt移植及Qt應(yīng)用界面設(shè)計(jì);(待更新)為模塊驅(qū)動(dòng)。匆年華,轉(zhuǎn)眼間大學(xué)四年就過去了。都說歲月如梭光陰似箭從一個(gè)襁褓孩提而今變成一個(gè)要承擔(dān)起 成家立業(yè)的責(zé)任。唯有驕傲的是現(xiàn)在還年輕,只有21周歲,距離而立之年還有9年光陰。供一條可以快速入門的途徑罷了,我也希望綿薄之力有這個(gè)作用。感謝亞泰光電的時(shí)間供給,感謝各位網(wǎng)友的建議,感的悉心照顧。(由于網(wǎng)友迫切需要資料,先將未完成的書稿公布,真切希望網(wǎng)友找。未完待續(xù)……)寧靜致遠(yuǎn)工作室2013129日1、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com1章Makefile的基識本知識在移植ubootuboot中用到的Makefile刀不誤砍柴工”嘛。有 1.1Makefile規(guī)則一個(gè)語句由目標(biāo)、依賴條件、指令組成。如程序1.1所示。程序11Makefile基本組成amsununconfig:先決條件;-$(obj)board/samsung/smdk6400:命令。這里特別注意,“、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com1章Makefile的基識本知識在移植ubootuboot中用到的Makefile刀不誤砍柴工”嘛。有 1.1Makefile規(guī)則一個(gè)語句由目標(biāo)、依賴條件、指令組成。如程序1.1所示。程序11Makefile基本組成amsununconfig:先決條件;-$(obj)board/samsung/smdk6400:命令。這里特別注意,“@”前面是Tab鍵,并且必須是Tab鍵,而不能是空格。目標(biāo)和先決條件是依賴,目標(biāo)是依賴于先決條件生成的。1.2Makefile變量1.2.1變量的方式“$(VARIABLE_NAME)”或者“${VARIABLE_NAME來變量的1.2所示。程序1.2變量的BUILD“BUILD_DIR”變量值不為目錄。詳細(xì)請參考《GNUmake》。1.2.2遞歸方式擴(kuò)展的變量“遞歸展開”式變量。其優(yōu)點(diǎn)是:這種類型變量在續(xù)部分定義,或者是通過make,可以其它的之前沒有定義的變量(可能在后令行選項(xiàng)傳遞的變量)。如程序1.3所示。程序1.3遞歸方式擴(kuò)展的變量2stu=dleinlteiCL=SSstu(dtenat)her)tea=cyhaenrgobj :$(OBJTREE)/OBJT:$(i(fBUILD_DIR),$(expBoUrItLD_DIR=/tmp/buildnnffiigg@mk-$i(robj)(ionbcjlubdoeard/s、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com按照遞歸擴(kuò)展的變量規(guī)則,輸出是:lilei yang。也就是說雖然teacher是在CLASS語句之后,但是還是會被替換掉。其缺點(diǎn)是:1.make陷入到無限的變量展開過程中,最終使make執(zhí)行失敗。如程序1.4所示。程序 1.4遞歸擴(kuò)展的變量陷入循環(huán)這樣的話會使得Makefile出錯(cuò),因?yàn)槎甲罱K了。2.第二個(gè)缺點(diǎn):這種風(fēng)格的變量定義中如果使用了函數(shù),那么包含在變量值中的函數(shù)總會在變量被的地方執(zhí)行(變量被展開時(shí))。1.2.3直接展開式變量”變量的問題和不方便。GNUmake、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com按照遞歸擴(kuò)展的變量規(guī)則,輸出是:lilei yang。也就是說雖然teacher是在CLASS語句之后,但是還是會被替換掉。其缺點(diǎn)是:1.make陷入到無限的變量展開過程中,最終使make執(zhí)行失敗。如程序1.4所示。程序 1.4遞歸擴(kuò)展的變量陷入循環(huán)這樣的話會使得Makefile出錯(cuò),因?yàn)槎甲罱K了。2.第二個(gè)缺點(diǎn):這種風(fēng)格的變量定義中如果使用了函數(shù),那么包含在變量值中的函數(shù)總會在變量被的地方執(zhí)行(變量被展開時(shí))。1.2.3直接展開式變量”變量的問題和不方便。GNUmake支持另外一種風(fēng)格的變“:=”定義。在使用“:=”定義變量時(shí),變量值中對其他量或者函數(shù)的在定義變量時(shí)被展開(對變量進(jìn)行替換)。如程序1.5所示。程序 1.5直接展開式變量這里的輸出是:teacher。此風(fēng)格變量在就完成了對所量的。1.2.4條件賦值只有此變量在之前沒有賦值的情況下才會對這個(gè)變量進(jìn)行賦值。如程序 1.6所示。程序1.6條件賦值由于X在之前被賦值了,所以這里的輸出是。3X:studentX?teacherall:@e$ho)X:studentY:$(X)X:teacherall:@e$ho()Y)x=$(y)y=$(z)z=$(x)a:l@e$hoLASS)、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com1.2.5變量的替換(字符串$(R:=(或者${R:=R”中所有“A”字符結(jié)尾的字為“B”結(jié)尾的字。、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com1.2.5變量的替換(字符串$(R:=(或者${R:=R”中所有“A”字符結(jié)尾的字為“B”結(jié)尾的字?!敖Y(jié)尾”的含義是空格之前(變量值多個(gè)字之間使用空格)。而對于變量其它部分的“A”字符不進(jìn)行替換。如程序1.7所示。程序1.7變量的替換這里特別注意的是$(Xo=.c)的“=”兩邊不能有空格。這里的輸出是:fun.omain.o fun.cmain.c1.2.6追加變量值們可以在追加操作。如程序 1.8所示。程序1.8追加變量值fun.omain.osub.o.“+=”會自動(dòng)變成“=”,此變量就被定義為一個(gè)遞歸展開式的變量如果之前 格。2.直接展開式變量的追加過程:變量使用“:=”定義,之后“+=”操作將會首先替換展開程如下所示。的變量風(fēng)等效于:.“=”定義,之后“+=”操作時(shí)不對之前此變量值中的任何“=”給此變量重新賦值。variabllee 4varivaleevari$(leriable)varivaleevarimoleX=fumain.oX+sub.oall:@e$ho)X:fum.on.oY:$(Xo:=.c)all:@e$ho()Y)、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comvari、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comvarimole 等效于:1.3Makefile函數(shù)1.3.1addprefix$(addprefixPREFIX,NAMES…)。中的每一個(gè)文件名添加前綴“PREFIX”。參數(shù)“NAMES…”是空格分割的文件名序列,將“SUFFIX”添加到此序列的每一個(gè)文件名之前。“PREFIX”的文件名序列。$(adsrrbfioo 返回值為“src/foosrc/bar”。OBJS:=$(addprefix$(obj),$(OBJS))成之后即為“$(obj$(CPUDIR)/start.o”。1.3.2addsuffix$(addprefixSUFFIX,NAMES…)函數(shù)名稱:加后綴函數(shù)—addsuffix。中的每一個(gè)文件名添加后綴“SUFFIX”。參數(shù)“NAMES…”為空格分割的文件名序列,將“SUFFIX”追加到此序列的每一個(gè)文件名的末尾。“SUFFIX”的文件名序列。$(ad.cbfar)x 返回值為:fob.c.c 5te=mvpaluevariabtmrp)、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com2章u-boot-2012.10移植之之準(zhǔn)備工作2.1安裝交叉編譯工具版本:arm-linux-gcc4.4.1環(huán)境:ubuntu10.04.4(迄今為止,個(gè)人認(rèn)為最為和健全的版本)2.1.1安裝步驟1.、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com2章u-boot-2012.10移植之之準(zhǔn)備工作2.1安裝交叉編譯工具版本:arm-linux-gcc4.4.1環(huán)境:ubuntu10.04.4(迄今為止,個(gè)人認(rèn)為最為和健全的版本)2.1.1安裝步驟arm文件夾里面。然后解壓縮,命令根據(jù)壓縮包的不同而不同。vimetc/profile。PATH=$PATH:/usr/local/arm/4.4.1/bin。執(zhí)行命令:sourceetc/profile。檢測安裝是否 :arm-linux-gcc-v;如果 4.4.1SourceryGLite2009q3-67)。.2.2Linux操作基本命令1.建立目錄當(dāng)我們工作的需要,建立一個(gè)目錄的時(shí)候,我們可以使用“mkdir”命令來建立一個(gè)目錄,mkdirmyfile。2.刪除目錄“rmdir”rmdirmyfile。3.文件并且重命名將s3c6400.h一份并且重命名為s3c6410.h,如:cps3c6400.hs3c6410.h。4. 解壓、打包、壓縮.tar解包:tarxvfFileName.tar打包:tarcvfFileName.tarDirName(注:tar是打包,不是壓縮?。?gzFileName.gz2:gzip-dFileName.gz壓縮:gzipFileName.tar.gz和.tgz解壓:tarzxvfFileName.tar.gz壓縮:tarzcvfFileName.tar.gzDirName6、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com.bz2-dFileName.bz2、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com.bz2-dFileName.bz2FileName.bz2bzip2-zFileName.tar.bz2FileName.tar.bz2壓縮:tarjcvfFileName.tar.bz2DirName.bz1:bzip2-dFileName.bzFileName.bz壓縮:未知.tar.bztarjxvfFileName.tar.bz壓縮:未知.Z解壓:uncompressFileName.Z壓縮:compressFileName.tar.Z解壓:tarZxvfFileName.tar.Z壓縮:tarZcvfFileName.tar.ZDirName.zipDirName2.3刪除與修改移植平臺:s3c64102.3.1s3c6410無關(guān)文件安裝tree,命令:sudoapt-getinstalltree。完成之后使用tree–L1查看第一級目錄下有什么,初步觀察下u-boot2.1所示。7、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com21uboot框架.5.6.進(jìn)入\arch,對于文件夾,除了、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com21uboot框架.5.6.進(jìn)入\arch,對于文件夾,除了arm之外,全部刪除。進(jìn)入\arch\arm\cpu,保留arm1176和u-boot.lds,其余文件夾可刪除。進(jìn)入\arch\arm\crm11763個(gè),保留s3c64XX2個(gè)。進(jìn)入\arch\arm\include\asm,僅對arch-*arch-s3c64XX之外全部刪除。進(jìn)入\board,除\samsung以外的文件夾全部刪除。進(jìn)入\board\samsung,smdk*中,除了smdk6400,其余文件夾可刪除。繁雜。2.4初步修改文件本次初步操作是64006410。1.下面。將smdk6410smdk6400.csmdk6410.c,smdk6400_nand_spl.c文件修改成smdk6410_nand_spl.c。將smdk6410Makefile中的:COBJS-ysmdk6400.oCOBJS-y:=smdk6410.o。smdk6410smdk6400下的所有文件拷貝到smdk6410下面。將smdk6410下的Makefile中的:COBJS nand_boot.onand_ecc.os3c64xx.osmdk6400_nand_spl.onand_base.o修改為COBJS nand_boot.onand_ecc.os3c64xx.osmdk6410_nand_spl.onand_base.o;@ln-s$(TOPDIR)/board/samsung/smdk6400/lowlevel_init.S$@修改成@ln-s$(TOPDIR)/board/samsung/smdk6410/lowlevel_init.S$@;2.8、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com$(obj)smdk6400_nand_spl.c:修改成$(obj)smdk6410_nand_spl.c:;-$@修改成@ln-s$(TOPDIR)/board/samsung/smdk6410/smdk6410_nand_spl.c$@。smdk6400.hsmdk6410.h。將CONFIG_S3C6400修改為CONFIG_S3C6410CONFIG_SMDK6400修改為CONFIG_SMDK6410。在\arch\arm\include\asm\arch-s3c64xx下,將s3c6400.h拷貝一份重命名為s3c6410.h。打開s3c6410.h,將、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com$(obj)smdk6400_nand_spl.c:修改成$(obj)smdk6410_nand_spl.c:;-$@修改成@ln-s$(TOPDIR)/board/samsung/smdk6410/smdk6410_nand_spl.c$@。smdk6400.hsmdk6410.h。將CONFIG_S3C6400修改為CONFIG_S3C6410CONFIG_SMDK6400修改為CONFIG_SMDK6410。在\arch\arm\include\asm\arch-s3c64xx下,將s3c6400.h拷貝一份重命名為s3c6410.h。打開s3c6410.h,將#ifndefS3C6400_H和#defineS3C6400_H修改成#ifndefS3C6410_H和#defineS3C6410_H,其余稍后修改。3.4.5.進(jìn)入\arch\arm\crm1176\s3c64xx,打開Makefile,將CONFIG_S3C6400修改成CONFIG_S3C6410。進(jìn)入\board\samsung\smdk6410,打開smdk6410.c和lowlevel_init.s;6.進(jìn)入\arch\arm\crm1176\s3c64xx,打開cpu_init.s、reset.s、speed.c和timer.c;進(jìn)入\drivers\serial,打開s3c64xx.c;s3c64xx-hcd;將上面文件中的#includeasm/arch/s3c6410.h>修改成#includeasm/arch/s3c6410.h>。修改最頂層的MakefileCROSS_COMPILE修改成CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux-;在arm1176部分,作如下修改。7.gsamsoardcOlOuTd"OlnTuBd_ecosmdksmdkg4xxdOlTue此時(shí)makesmdk6410_configmake,如果上面操作沒有錯(cuò)誤的話,應(yīng)該是編譯成功,但是此時(shí)還是基于s3c6400,只是披著s3c6410皮的s3c6400罷了。至此為止,u-boot:u-boot-2012.10.19smdk641\_noUSB_confismdk6:un_onniig@m-p(ob$(obj)board/@m-p(obj)nand_spl/b@echoefNineG>$N(AoNbDj_)Ui_nB@echoNFI=y_"N>A(NoDb_jU)_iBnOc@[fz$(fsmdk6410];oU\ec"hRoA=0_xT5E7>e>00000"$(obj)board/samsung/else \ec"hRoA=0_xTcE7>e>00000"$(obj)board/samsung/fi@$(MKCONFIsm1dk6ms3cn6@echoNFI=y_"N>A(NoDb_jU)_iBnOc、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.coms3c6400的原版,到時(shí)候全部修改完成就是披著s3c6400皮的s3c6410了!這樣本章節(jié)你只需修改一個(gè)地方:在最頂層的Makefile中,添加編譯工具:將CROSS_COMPILECROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux-。經(jīng)過本章節(jié)的操作,進(jìn)行編譯。2.2、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.coms3c6400的原版,到時(shí)候全部修改完成就是披著s3c6400皮的s3c6410了!這樣本章節(jié)你只需修改一個(gè)地方:在最頂層的Makefile中,添加編譯工具:將CROSS_COMPILECROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux-。經(jīng)過本章節(jié)的操作,進(jìn)行編譯。2.2所示。2.2編譯結(jié)果2.5CRT工具SecureCRT_CN工具是一個(gè)很方便查看的窗口,即可連通ubuntu、即可作為OK6410串口輸出查看窗口,還可以很方便的傳輸文件。開啟ubuntu上的ssh功能,先安裝,安裝后就自動(dòng)開啟了。接著安裝CRT工具,安裝好之后便可使用。配置終端類型,顯示顏色Options->SessionOptions->EmulationTerminalxtermANSIColor1)復(fù)選框。2)配置字體,編碼方式Options(會話選項(xiàng))Terminal(終端)->Appearance(顯示),將Charater(字符)選擇成UTF-8就支持中文了。10sudpot-geaellssh-servemaskmedk6410_config......maaklel、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com3)vim中顏色顯示效果在打開的終端中,編輯、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com3)vim中顏色顯示效果在打開的終端中,編輯/etc/profile在文末添加如下內(nèi)容:exTE=xterm-color 添加完畢后執(zhí)行如下內(nèi)容,使之生效:so/etc/profile 11、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com第3章u-boot-2012.10移植之start 之版本不斷更新,但是根基是萬不能變,所以u-bootstart.s中開始執(zhí)行。打開最頂層的Makefile,最先構(gòu)建的也是start.o,如下所示。21O6B、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com第3章u-boot-2012.10移植之start 之版本不斷更新,但是根基是萬不能變,所以u-bootstart.s中開始執(zhí)行。打開最頂層的Makefile,最先構(gòu)建的也是start.o,如下所示。21O6BJ$S(CPUDIR)/start.o 3.1硬件初始化在start.s中第一行代碼,一上電,系統(tǒng)復(fù)位。.globl 如果一個(gè)符號沒有用.globl,就表示這個(gè)符號被鏈接器用到。4種:1)2)3)4)BBL跳轉(zhuǎn)指令帶返回的跳轉(zhuǎn)指令帶狀態(tài)切換的跳轉(zhuǎn)指令帶返回和狀態(tài)切換的跳轉(zhuǎn)指令_stbarrets:et 而這句跳轉(zhuǎn)時(shí),PC寄存器的值將回到reset,這是s3c6410一上電做的第一件事情。如下所示。1.將cpu的工作模式設(shè)置為管理模式7種運(yùn)行模式,分別為:用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài)。(fiq):用于高速數(shù)據(jù)傳輸或通道處理。外部中斷模式(irq):用于通用的中斷處理。(svc):操作系統(tǒng)使用的保護(hù)模式。數(shù)據(jù) 保護(hù)。及(sys):運(yùn)行具有的操作系統(tǒng)任務(wù)。12reset:/**sthcetSVmo2e*/mrs0c,psrbirc0r,0#,0x3forr0r,0#,0xd3mcprr,.gl_osbtlart_stbarrets:et、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的。接著進(jìn)入cpu_init_crit,即cpu初始化階段。2.初始化CACHE3.初始化MMU))4.初始化外設(shè),指明外設(shè)的基地址MAPB_ASSIEZ接下來是執(zhí)行帶返回跳轉(zhuǎn)指令:bllowlevel_init、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com(und):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的。接著進(jìn)入cpu_init_crit,即cpu初始化階段。2.初始化CACHE3.初始化MMU))4.初始化外設(shè),指明外設(shè)的基地址MAPB_ASSIEZ接下來是執(zhí)行帶返回跳轉(zhuǎn)指令:bllowlevel_init,進(jìn)入lowlevel_init(位于board\samsung\smdk6410\lowlevel_init.s)。5.LED初始化原始是與s3c6400配置,如下所示。13lr=ELFIN_GPIO_BASElr=0x55540000sr[r#0G,PNCON_OFFSET]lr=0x55555555sr[r#0G,PNPUD_OFFSET]lr=0xf000sr[r#0G,PNDAT_OFFSET]#iCONFIG_PERIPORT_RE/*eprosretuplr=CONFIG_PERIPORT_orr#CONFIG_PERIPORTmp15,0,r0,c15,c2,4#endifmp105,,cc0,brr#0x0@clea1s0--V-Sbrr#0x0@clea7,s(7B---Morr#0x0@sb2t0Al2ignorr#0x0@sb112000Cachemr#0mp105,,cc0/*lushv4hemp105,,cc0/*lush/、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com這里應(yīng)該改成與s3c6410OK6410,所以由OK64103.1所示。3、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com這里應(yīng)該改成與s3c6410OK6410,所以由OK64103.1所示。31LED原理圖根據(jù)s3c6410M寄存器章節(jié)可以對程序作出如下修改。根據(jù)需要,LED測試自行修改:6.關(guān)閉看門狗14lr=0x7e00000004000orr#0x4000mr#0/*te*s/tlr=ELFIN_GPIO_BASElr=0x000sr[r#0G,PMDAT_OFFSET]/*onn#l8y/lr=ELFIN_GPIO_BASElr=0x00111111sr[r#0G,PMCON_OFFSET]lr=0x00000555sr[r#0G,PMPUD_OFFSET]/*ofEaDpsowerlr=0x000fsr[r#0G,PMDAT_OFFSET]、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com7.關(guān)閉中斷DDDDRRblsystem_clock_init,跳轉(zhuǎn)到系統(tǒng)時(shí)鐘初始化。8.系統(tǒng)時(shí)鐘初始化程序較長,不加以羅列。系統(tǒng)時(shí)鐘初始化起始于:0_BA其中將修改成:我們看到15#if、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com7.關(guān)閉中斷DDDDRRblsystem_clock_init,跳轉(zhuǎn)到系統(tǒng)時(shí)鐘初始化。8.系統(tǒng)時(shí)鐘初始化程序較長,不加以羅列。系統(tǒng)時(shí)鐘初始化起始于:0_BA其中將修改成:我們看到15#ifCnOdNeFIG_S3C64lr[r#0O,THERS_OFFSET]ldrr1=,0x80200203/*OoUfTPiLsL6MHzlr=0x200203system_clock_init:lr=ELFIN_CLOCK*POWE/*xtertnalnculeagrlr=(ELFIN_GPIO_BASElr[r0]sr[r0]lr=ELFIN_VIC0_BASE_lr=ELFIN_VIC1_BASE_/*isaaibnlte(VIVIC1)mr#0x0sr[r#0o,INTMSK]sr[r#1o,INTMSK]/*ainteas*/ptsmr#0x0sr[r#0o,INTMOD]sr[r#1o,INTMOD]/*enIdnitnCglrartmr#0x0sr[r#0o,VECTADDR]sr[r#1o,VECTADDR]sr[r0]、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com由于這里還是S3C6410CONFIG_S3C6400的宏中)。在此就先分析一下smdk6410.h這個(gè)文件。0Xl0d0y將s3c6400s3c6410相關(guān):XlydASE這里SDRAM的基地址是:、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com由于這里還是S3C6410CONFIG_S3C6400的宏中)。在此就先分析一下smdk6410.h這個(gè)文件。0Xl0d0y將s3c6400s3c6410相關(guān):XlydASE這里SDRAM的基地址是:0x500000000。這個(gè)無需修改。這個(gè)是s3c6400s3c6410,否則在啟動(dòng)內(nèi)核的時(shí)候會出問題。修改成:為了在u-boot10s。修改成:/*on*d/t #deCfOiNnFeIG_1S0Y0S0_HZ 這個(gè)時(shí)間是在PCLK50MHz,故應(yīng)該修改為:#deCfOiNnFeIG_1S5Y6S2_5H0Z0 16#deCfOiNnFeIG_"SzYzS>>_>P4R1O0MPT/*on*d/t #deCfOiNnFeIG_"SSYMS#"KP6R4O0M0PT#deCfOiNnFeIG1_0BOOTDELAY#deCfOiNnFeIG_MACH_TYPE/**Architectutrypnee*/#deCfOiNnFeIG_1M2A7C0H_TYPE#deCfOiNnFeIG_0SxY5S0_0S0D0R0A0M0_B#deCfOiNnFeIG1_/S*3nS64SS3CN6G4*/#deCfOiNnFeIG1_/S*3nS64SS3XCN6G4mXi/#deCfOiNnFeIG1_/S*MnSK6SSM0K64r#deCfOiNnFeIG1_/S*3nS64SS30CN6G4*0/#deCfOiNnFeIG1_/S*3nS64SS3XCN6G4mXi/#deCfOiNnFeIG1_/S*MnSK6SSM0DK64rbrr#0xC0orr#0x40sr[r#0O,THERS_OFFSET]、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comKSD/RAM因?yàn)閟3c6410256MBSDRAM,故應(yīng)該修改成:KSD/RAM堆棧的大小要修改為:G修改成:Gc00000修改為:#\deCfOiNnFeIG"_nB50D00;""bx5001800、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comKSD/RAM因?yàn)閟3c6410256MBSDRAM,故應(yīng)該修改成:KSD/RAM堆棧的大小要修改為:G修改成:Gc00000修改為:#\deCfOiNnFeIG"_nB50D00;""bx50018000"#deCfOiNnFeIG_0ExN0V0_4O0F0F0S0ET 修改為:#deCfOiNnFeIG_0E000000FFSET BOOTBOOT修改成:BOOT17/*ftoU-image#deCfOiNnFeIG_SY(SN0A2N4D)_U_/*ftoU-image#deCfOiNnFeIG_SYS*1024)_U_/*iozfeU-im*/e#deCfOiNnFeIG_SYS*NA2N4D)_U_#deCONnFIG_B\"b0x50018000"#deCfOiNnFeIG_"_4STRIN#deCfOiNnFeIG_"NDTK_6S4T0R0I"N/*otofenviSreo*n/moernt#deCfOiNnFeIG_0SIZE/*otofenviSreo*n/moernt#deCfOiNnFeIG_0ExN4V0_0S0IZE#deCfOiNnFeIG_1NR_DRAM_BAN/*DR#1k/#dePfHiYnSe_SCDORNAFMI_G1_SYS_S#dePfHiYnSe_S010AM_1_SnIaZnE*#deCfOiNnFeIG_1NR_DRAM_BAN/*DR#1k/#dePfHiYnSe_SCDORNAFMI_G1_SYS_S#dePfHiYnSe_S0DxR0A8M/_*1_S0I0ZnE*、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comBOOTGE_SOCK_GE_C根據(jù)K9F2G08U0A手冊,修改成:GE_SOCK_GE_C回到lowlevel_init.s中,C6400r修改成:C6410r18#e、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comBOOTGE_SOCK_GE_C根據(jù)K9F2G08U0A手冊,修改成:GE_SOCK_GE_C回到lowlevel_init.s中,C6400r修改成:C6410r18#e!ldieffined(CONFIG_S3/*cctrding8um_0Sx32lr[r#0O,THERS_OFFSET]#e!ldieffined(CONFIG_S3/*cctrding8um_0Sx32lr[r#0O,THERS_OFFSET]brr#0x20sr[r#0O,THERS_OFFSET]#ifCnOdNeFIG_S3C64lr[r#0O,THERS_OFFSET]brr#0xC0orr#0x40sr[r#0O,THERS_OFFSET]wait_for_async:lr[r#0O,THERS_OFFSET]arr#0xf00cr#0x0bwait_for_async#endif/*AcNhpiasgiez*e/#deCfOiNnFeIG_SY(S2_024)8ND_PA/*AcNhbiloc*e/#deCfOiNnFeIG_SY(S1**AND_BL/*AcNhpiapgelocknt#deCfOiNnFeIG_SY(SN)AND_PA/*AcNhpiasgiez*e/#deCfOiNnFeIG_SY2S0_4N8AND_PA/*AcNhbiloc*e/#deCfOiNnFeIG_SY(S1*NA2N4D)_BL/*AcNhpiapgelocknt#deCfOiNnFeIG_SY6S4_NAND_PA/*iozfeU-im*/e#deCfOiNnFeIG_SY(S4*NA2N4D)_U_、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com系統(tǒng)初始化結(jié)束之后,執(zhí)行即是回到系統(tǒng)初始化執(zhí)行的地方。即為:進(jìn)入U(xiǎn)ATR初始化。9.UART初始化接著回到當(dāng)初跳轉(zhuǎn)的地方,即是:進(jìn)入Nand初始化。10.Nand初始化回到跳轉(zhuǎn)之處,即為:19/、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com系統(tǒng)初始化結(jié)束之后,執(zhí)行即是回到系統(tǒng)初始化執(zhí)行的地方。即為:進(jìn)入U(xiǎn)ATR初始化。9.UART初始化接著回到當(dāng)初跳轉(zhuǎn)的地方,即是:進(jìn)入Nand初始化。10.Nand初始化回到跳轉(zhuǎn)之處,即為:19/*esubadd0rxe7m*s/0f120nand_asm_init:lr=ELFIN_NAND_BASElr[r#0N,FCONF_OFFSET]orr#0x70orr#0x7700sr[r#0N,FCONF_OFFSET]lr[r#0N,FCONT_OFFSET]orr#0x07sr[r#0N,FCONT_OFFSET]mplr#iCONFIG_BOOT_NAND/*iinfitA*N/Dbland_asm_init#endifuart_asm_init:/*GPtIoOnUA*R/Tlr=ELFIN_GPIO_BASElr=0x220022sr[r#0G,PACON_OFFSET]mplr#ifCnOdNeFfIG_NAND_SPL/*UA*R/Tblart_asm_init#endifmplrbrr#0x20sr[r#0O,THERS_OFFSET]、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comGCFG_進(jìn)入內(nèi)存管理初始化。11.內(nèi)存管理初始化這里跳入到arch/arm/c自行查看。rm1176/s3c64xx/mem_ctrl_asm_init.s中。代碼較長,請讀者完成內(nèi)存管理之后,程序?qū)⑻豷tart.s執(zhí)行。12.MMU表00修改成:、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comGCFG_進(jìn)入內(nèi)存管理初始化。11.內(nèi)存管理初始化這里跳入到arch/arm/c自行查看。rm1176/s3c64xx/mem_ctrl_asm_init.s中。代碼較長,請讀者完成內(nèi)存管理之后,程序?qū)⑻豷tart.s執(zhí)行。12.MMU表00修改成:0回到start之后,設(shè)置堆棧指針nit_20/*stackpointebolard_i/*28SDRAM0->x5*/0000.s_e_tb0axs5e0,0.r0x0C00FL_SE__b3a,,,,NTRY.s_e_tb_a_s,se.endr/*cisallo/wed..rept00D000.w0oxr0d0000000.endr/*28SDRAM0->x5*/000.s_e_tb0axs5e0,0.r8x0C00FL_SE__b3a,,,,NTRY.s_e_tb_a_s,se.endr/*cisallo/wed..rept00c080.w0oxr0d0000000.endrr=ELFIN_MEM_SYS_CF/*m0=NFnXm,0=NFn*/r#S3C64XX_MEM_SYS_sr[r0]bmem_ctrl_asm_init、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com_SP_ance進(jìn)入uboot在SDRAM的內(nèi)存空間配置(arch/arm/lib的board.c中)。SDRAM的內(nèi)存空間配置board_init_f(ulongbootflag)。我們先看下面這段代碼。;IrT、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com_SP_ance進(jìn)入uboot在SDRAM的內(nèi)存空間配置(arch/arm/lib的board.c中)。SDRAM的內(nèi)存空間配置board_init_f(ulongbootflag)。我們先看下面這段代碼。;IrT_S;sTtarEE);/es(fs"dg>ftgd_t是一個(gè)結(jié)構(gòu)體類型,其定義在arch/arm/include/asm目錄下的global_data.h文件中。如下所示。td()_BUFlxecetn/mdrt?nt21typstgucb{al_databd_t*bd;unsliofnlegs;unsliobnaedrate;unsliohnaee/*onswca*n/ie#iCONFIG_PRE_CONSOLEunsliopnreco/_bufb_uidxd;e#endifunslioenne/*ddorf;nsvsisrtonmunslioenne_/*liodf;nsvuivrao*nunsliofnbe/*saed;doframe/e/*oiisritanblelarceagistgd(gd_(tCONFIG&SYS_IN/*ompitlierinefG=*/memset((vzoeiodf(gd_t))gd->=m_obns_sl_eennd_ofs;#iCONFIG_OF_EMBED/*atoitnotFr/gd->f_dbti_nbalroyb_dt_dtb_#edleiffCiOnNeFdIG_OF_SEPARA/*istofmagegd->f(dvoid__TEXT_BAS#endif/*llearlyitroovnerratdd*rgd->f(dvoidetenv_ulon(uintptr_t)gd-call_board_init_f:ls=(CONFIG_SYS_INITbss#7*-alifAconmtp*l/ilr0,=0x00000000bboard_init_f、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com;z;nit;/ormalue/r_staSC_AICC、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com;z;nit;/ormalue/r_staSC_AICCH/e/c.22#iCONFIG_FSL_ESDHCunsliosndec_clk;#endif#iCONFIG_AT91FAMILY/*stdaata"ytclo*c/k.cunsliocnpe_clk_rate_hzunsliomnaen_clk_rate_hunsliomnce_rate_hz;unsliopnlea_rate_hz;unsliopnleb_rate_hz;unslioante1_pllb_usb_i#endif#iCONFIG_ARM/*stdaata"yoosftimonplca*unsliotnieer_rate_hz;unsliotnbe;unsliotnbe;unsliolnogngmer_reset_vunsliolnaetinc;#endif#iCONFIG_IXP425unsliotnieestamp;#endifunsliorneeo/*ddrorfe-in*phys_ram_siz*e/;unsliomnoe/*enl*t/orunslioinre_/*stac*n/terunsliosntert/addr_sp*/unsliorneeoc_off;#!(defined(CONFIG_SYdefined(CONFIG_SYS_Dunsliotnle_addr;#endifcons*fdt/*detreeifLo*nvoi**j/*utmablechaenv_/*ffgetenv()、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com)IG_Ltieset;e_df我們可以看到gd_t、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.com)IG_Ltieset;e_df我們可以看到gd_t結(jié)構(gòu)體中定義了很多變量。而這些變量恰恰是u-boot中重要的全局變量。gd(gd_(tCONFIG&SYS_INITgd是一個(gè)結(jié)構(gòu)體指針,指向(gd_t*)CONFIG_SYS_INIT_SP_ADDR)&~0x07)。memset((vzoeiodf(gd_t));這條程序是將gd這個(gè)結(jié)構(gòu)體中所有變量都清零了。gd->=m_obns_sl_eennd_ofs; 而_bss_end_ofs是這樣定義的:_SPerrerttt在start.s中有這么一段代碼:接著看board_init_f這個(gè)函數(shù),_tp_tfrn)首先init_fnc_ptr定義為:init*_*finnci_tt_fnc_ptr; 而init_sequence定義為:23f(ini=i_nfintc__spetqrute_nfcnec;{if(*init_)fnc_ptr)(ha(n)g;}}.g_bss_start_ofs_bss_start_ofs:.ws-t.g_bss_end_ofs_bss_end_ofs:.ws-_.g_end_ofs_end_ofs:.wo-dstartexulongs_/*startassiv/exulongs_/*ereflatsiveexulongd/*ofmageatsiv/#defined||efined(CONFunsliopnoet_/l*oegP_OaScTr*/iunsliopnoet/*ucocfOS*;/tunsliopnoet_i/*henf_sttiamr#endif}gd_t;、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comtD_EALK_IsonsLAY_LAY__FII2G、淡泊明志、寧靜致遠(yuǎn):jxlgzzq@163.comtD_EALK_IsonsLAY_LAY__FII2GC_這個(gè)數(shù)組中存放的是指針,而數(shù)組中存放的是各個(gè)函數(shù)的函數(shù)指針,通過調(diào)用函數(shù)指針來調(diào)用函數(shù)。這些函數(shù)是進(jìn)行一些初始化的作用,在此不細(xì)究。24typie(dienfit_fnc_t)ini*init=sequence[]arch_c/*_ice,psedup#idfef

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論