日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

TQ210——下载总结

發(fā)布時(shí)間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TQ210——下载总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

TQ210——下載總結(jié)


學(xué)習(xí)方法:(分階段學(xué)習(xí))-----內(nèi)核學(xué)習(xí)是一個(gè)長(zhǎng)期的過(guò)程

?????? 1.學(xué)習(xí)使用內(nèi)核提供的接口函數(shù) (涉及到很多操作系統(tǒng)知識(shí),編程規(guī)范)

?????? 2.找到一個(gè)函數(shù)如do_fork來(lái)學(xué)習(xí)進(jìn)程管理模塊

?????? 3.通過(guò)kmalloc函數(shù)來(lái)學(xué)習(xí)進(jìn)程管理,通過(guò)do_irq學(xué)習(xí)中斷管理

1.U-BOOT配置與燒寫常用命令 (生成u-boot.bin)(u-boot下載地址:)

(1) u-boot配置及燒寫

?????? tar xzvf*.zip

?????? tar xjvf*.bz2

?????? 配置:make TQ210_config? 運(yùn)行:make ARCH=armCROSS_COMPILE=arm-linux-

?????? 大約????? 2分鐘后編譯完成,生成u-boot.bin,然后燒寫到開發(fā)板中

?????? 燒寫準(zhǔn)備:網(wǎng)線連接,下載線連接,電源線連接 (ping通就可以),將u-boot.bin復(fù)制到tftp服務(wù)器目錄下 (固化到開發(fā)板起始處)

?????? tftp30000000 u-boot.bin /*下載到內(nèi)存中*/

?????? nand erase0 100000?? /*擦除1M空間*/

?????? nand write30000000 0 100000 /*將30000000處內(nèi)容寫1M到硬盤開始處*/

(2) u-boot命令詳解

?????? help:察看當(dāng)前單板所支持的命令

?????? printenv:打印環(huán)境變量

?????? setenv:添加、修改、刪除環(huán)境變量

?????? saveenv:保存環(huán)境變量

?????? tftp:通過(guò)網(wǎng)絡(luò)下載文件

?????? bootmaddr:執(zhí)行程序,addr是執(zhí)行地址

?????? nand erase起始地址start 長(zhǎng)度len ---???? 擦除start處開始的,長(zhǎng)度為len的區(qū)域

?????? nand write內(nèi)存起始地址 flash起始地址 長(zhǎng)度len --- 將內(nèi)存起始地址處,長(zhǎng)度為len的數(shù)據(jù),寫入flash起始地址處

?????? nand read 內(nèi)存起始地址 flash起始地址 長(zhǎng)度len---將flash起始地址處,長(zhǎng)度為len的數(shù)據(jù),讀到內(nèi)存起始地址處

附:

?????? <1> ?配置 U-Boot

?????? TQ210:? makeTQ210_config

?????? Smart210:? make smart210_config

?????? OK210:? make forlinx_linux_config

?????? OK6410:? make forlinx_nand_ram256_config

?????? Tiny6410:? make tiny6410_config

?????? TQ2440:? make TQ2440_config

?????? Mini2440:? make mini2440_config

?????? <2> 下載與運(yùn)行

?????? TQ210:? tftp 0xc0008000 uImage

?????? Smart210:? tftp 0x20000000 uImage

?????? OK210:? tftp 0xc0008000 uImage

?????? OK6410:? tftp 0xc0008000 uImage

?????? Tiny6410: ?tftp 0xc0008000 uImage

?????? TQ2440:? tftp 0x31000000

?????? Mini2440:? tftp 0x31000000 uImage

?

2.內(nèi)核配置與編譯

(1) 為什么要配置內(nèi)核

?????? 硬件需求? 軟件需求 ----選出需要的,去掉不要的

(2) 內(nèi)核配置方法

?????? makeconfig:基于文本模式的交互式配置

?????? makemenuconfig:基于文本模式的菜單型配置 (更好一些)

?????? <*> 編譯時(shí)比選的

?????? <M> 編譯時(shí)可選的

?????? <>? 不選的

(3) 內(nèi)核配置結(jié)果:放在.config中

(4) 內(nèi)核編譯:make uImage j 2

?????? 編譯好的內(nèi)核位于arch/<cpu>/boot/目錄下uImage

(5) 清理內(nèi)核:make clean?? make distclean

mkimage工具講解:(編譯內(nèi)核時(shí)將mkimage移動(dòng)到/bin目錄下)

uboot源代碼的tools/目錄下有mkimage工具,這個(gè)工具可以用來(lái)制作不壓縮或者壓縮的多種可啟動(dòng)映象文件.

mkimage在制作映象文件的時(shí)候,是在原來(lái)的可執(zhí)行映象文件的前面加上一個(gè)0x40字節(jié)的頭,記錄參數(shù)所指定的信息,這樣uboot才能識(shí)別這個(gè)映象是針對(duì)哪個(gè)CPU體系結(jié)構(gòu)的,哪個(gè)OS的,哪種類型,加載內(nèi)存中的哪個(gè)位置, 入口點(diǎn)在內(nèi)存的那個(gè)位置以及映象名是什么

./mkimage -n 'U-boot' -A arm -O linux -T firmware -Cnone -d u-boot.bin u-boot.img

-A ==> set architecture to 'arch'

-O ==> set operating system to 'os'

-T ==> set image type to 'type'

-C ==> set compression type 'comp'

-a ==> set load address to 'addr' (hex)

-e ==> set entry point to 'ep' (hex)

-n ==> set image name to 'name'

-d ==> use image data from 'datafile'

-x ==> set XIP (execute in place)

參數(shù)說(shuō)明:

-A 指定CPU的體系結(jié)構(gòu):

取值 表示的體系結(jié)構(gòu)

alpha Alpha

arm A RM

x86 Intel x86

ia64 IA64

mips MIPS

mips64 MIPS 64 Bit

ppc PowerPC

s390 IBM S390

sh SuperH

sparc SPARC

sparc64 SPARC 64 Bit

m68k MC68000

-O 指定操作系統(tǒng)類型,可以取以下值:

openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos

-T 指定映象類型,可以取以下值:

standalone、kernel、ramdisk、multi、firmware、script、filesystem

-C 指定映象壓縮方式,可以取以下值:

none 不壓縮

gzip 用gzip的壓縮方式

bzip2 用bzip2的壓縮方式

-a 指定映象在內(nèi)存中的加載地址,映象下載到內(nèi)存中時(shí),要按照用mkimage制作映象時(shí),這個(gè)參數(shù)所指定的地址值來(lái)下載

-e 指定映象運(yùn)行的入口點(diǎn)地址,這個(gè)地址就是-a參數(shù)指定的值加上0x40(因?yàn)榍懊嬗袀€(gè)mkimage添加的0x40個(gè)字節(jié)的頭)

-n 指定映象名

-d 指定制作映象的源文件

?/mkimage -A arm-O linux -C gzip -a 0x20008000 -e 0x20008000 -d linux.bin.gz uImage??

-a參數(shù)后是內(nèi)核的運(yùn)行地址,-e參數(shù)后是入口地址

<1> 如果我們沒(méi)用mkimage對(duì)內(nèi)核進(jìn)行處理的話,那直接把內(nèi)核下載到0x30008000再運(yùn)行就行,內(nèi)核會(huì)自解壓運(yùn)行(不過(guò)內(nèi)核運(yùn)行需要一個(gè)tag來(lái)傳遞參數(shù),而這個(gè)tag建議是由bootloader提供的,在u-boot下默認(rèn)是由bootm命令建立的)。

<2>如果使用mkimage生成內(nèi)核鏡像文件的話,會(huì)在內(nèi)核的前頭加上了64byte的信息,供建立tag之用。bootm命令會(huì)首先判斷bootm xxxx 這個(gè)指定的地址xxxx是否與-a指定的加載地址相同。

?????? (1)如果不同的話會(huì)從這個(gè)地址開始提取出這個(gè)64byte的頭部,對(duì)其進(jìn)行分析,然后把去掉頭部的內(nèi)核復(fù)制到-a指定的load地址中去運(yùn)行之

?????? (2)如果相同的話那就讓其原封不同的放在那,但-e指定的入口地址會(huì)推后64byte,以跳過(guò)這64byte的頭部

?

3.內(nèi)核模塊

(1) 特點(diǎn):<1> 模塊本身并不被編譯進(jìn)內(nèi)核文件(zImage或者bzImage)

????????????? ?<2> 可以根據(jù)需求,在內(nèi)核運(yùn)行期間動(dòng)態(tài)的安裝或卸載

(2) 范例

// hello.c #include <linux/init.h> #include <linux/module.h> static int hello_init(void) {printf(KERN_WARNING"Hello,world!\n");return 0; } static void hello_exit(void) {printf("KERN_INFO"Goodbye,world!\n"); } module_init(hello_init);//加載內(nèi)核模塊 module_exit(hello_exit);//卸載內(nèi)核模塊

Makefile:

obj -m := hello.o

KDIR := /lib/modules/2.6.../build? # 內(nèi)核代碼路徑

all:

?????? make -C$(KDIR) M=$(PWD) modules

(3) 安裝與卸載

?????? 安裝:insmod? (insmod hello.ko)

?????? 卸載:rmmod?? (rmmod hello)

?????? 查看:lsmod

(4) 模塊聲明

?????? MODULE_LICENSE("遵循的協(xié)議") --- 申明該模塊遵守的許可證協(xié)議,如:“GPL“、”GPL v2“等

?????? MODULE_AUTHOR("作者") --- 申明模塊的作者

?????? MODULE_DESCRIPTION("模塊的功能描述") --- 申明模塊的功能

?????? MODULE_VERSION("V1.0")--- 申明模塊的版本

(5) 模塊參數(shù)

?????? 應(yīng)用程序中:int main(int argc,char**argv)?????? argc表示命令行輸入的參數(shù)個(gè)數(shù),argv中保存輸入的參數(shù)

?????? 內(nèi)核模塊中:通過(guò)宏module_param指定保存模塊參數(shù)的變量,模塊參數(shù)用于在加載模塊時(shí)傳遞參數(shù)給模塊

?????? module_param(name,type,perm)

?????? name:變量的名稱

?????? type:變量類型,bool:布爾型 int:整型 charp:字符串型

?????? perm是訪問(wèn)權(quán)限,S_IRUGO:讀權(quán)限 S_IWUSR:寫權(quán)限

?????? 例如:

????????????? inta = 3;

????????????? char*st;

????????????? module_param(a,int,S_IRUGO);

????????????? module_param(st,charp,S_IRUGO);

(6) 符號(hào)導(dǎo)出

?????? 內(nèi)核符號(hào)的導(dǎo)出使用宏:EXPORT_SYMBOL(符號(hào)名)

(7) 總結(jié)

對(duì)比應(yīng)用程序,內(nèi)核模塊具有以下不同:

?????? <1>.應(yīng)用程序是從頭(main)到尾執(zhí)行任務(wù),執(zhí)行結(jié)束后從內(nèi)存中消失。

?????? <2>.內(nèi)核模塊的初始化函數(shù)結(jié)束時(shí),模塊仍然存在于核中,直到卸載函數(shù)被調(diào)用,模塊才從內(nèi)核中消失。

?

4.Linux內(nèi)核制作 (生成uImage)(www.kernel.com)

解壓:???? tar xzvf *.zip

????????????? tarxjvf *.bz2

步驟:

(1) 清理 make distclean

(2) 配置 make menuconfig ARCH=arm

(3) 編譯 make uImage ARCH=arm CROSS_COMPILE=arm-linux-

?????? 提示:mkimage not found ---mkimage幫助加文件頭

?????? 在u-boot的tools目錄中,移動(dòng)mkimage到/bin下,再重復(fù)(3)操作

(4) 在/arch/arm/boot中生成了uImage

燒寫到開發(fā)板:(固化到開發(fā)板5M處) 具體值參考/drivers/mtd/nand/s3c_nand.c文件

?????? tftp30000000 uImage

?????? nand erase500000 5000000

?????? nand write30000000 500000 500000

環(huán)境變量設(shè)置

?????? setenvbootcmd read 30000000 500000 500000\;bootm 300000

?

5.根文件系統(tǒng)的制作 (套件下載:)

(1) 建立跟文件系統(tǒng)目錄

?????? ---建議使用shell腳本

?????? <1> 創(chuàng)建目錄

????????????? mkdirbin devetc lib proc sbin sys usr mnt tmp var

????????????? mkdirusr/bin usr/lib usr/sbin lib/modules

?????? <2> 創(chuàng)建設(shè)備文件

????????????? cdrootfs/dev

????????????? mknod-m 666 console c51

????????????? mknod-m 666 null c13

?????? <3> 加入配置文件

????????????? taretc.tar.gz ()

????????????? mvetc/*...*/root/etc/ -rf

?????? <4> 編譯安裝busybox

?????? /**************************************************************

?????? 下載 BusyBox 的源碼包

?????? 下載地址:www.busybox.net/downloads,最新版本為busybox-1.20.2

?????? tar jxvfbusybox-1.20.2.tar.bz2

?????? cdbusybox-1.20.2

?????? 修改 Makefile 中的體系結(jié)構(gòu) ARCH 和交叉編譯器前綴 CROSS_COMPILE

?????? vimMakefile

?????? 把 164 行修改為:

?????? CROSS_COMPILE= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-?????? (路徑不要復(fù)制,根據(jù)自己的情況填寫)

?????? 把 190 行修改為:

?????? ARCH = arm

?????? **************************************************************/

????????????? makemenuconfig

???????????????????? BusyboxSettings àbuild Options->

???????????????????? 選中 “Build busybox as astaticbinary”, 靜態(tài)鏈接

???????????????????? CrossCompiler prefix (arm-linux-)

???????????????????? InstallationOptions->

???????????????????? 選中 “Don‘t use /usr”, 選中該項(xiàng)可以避免busybox 被安裝到宿主系統(tǒng)的

???????????????????? /usr目錄下,破壞宿主系統(tǒng)

???????????????????? BusyboxInstallation Prefix(/xxx/rootfs)

???????????????????? 該選項(xiàng)表明編譯后的busybox的安裝位置

????????????? make(編譯)

????????????? makeinstall (安裝)???

????????????? 最后生成一個(gè)_install子目錄

????????????? mv_install mini_rootfs

????????????? cdmini_rootfs

????????????? 編寫一個(gè)腳本文件(略)--用于創(chuàng)建目錄和文件的

(2) 掛載跟文件系統(tǒng)

?????? <1> 拷貝交叉編譯器里的動(dòng)態(tài)鏈接庫(kù)到 lib 目錄:cp/usr/local/arm/arm-none-linux-gnueabi/lib/ *.so* lib -rdf

?????? <2> 對(duì) lib 目錄下的動(dòng)態(tài)鏈接庫(kù)進(jìn)行裁減:arm-none-linux-gnueabi-striplib/.so

?????? <3> 獲得mkyaffs2image 工具的源碼包:http://fatplus.googlecode.com/files/yaffs2-source.tar

????????????? 編譯mkyaffs2image 工具: ar xvf yaffs2-source.tar

??????????????????????????????????????????????????????? cdyaffs2/utils

??????????????????????????????????????????????????????? make

??????????????????????????????????????????????????????? cpmkyaffs2image /usr/local/bin/

?????? <4> 制作根文件系統(tǒng)鏡像:mkyaffs2image mini_rootfsrootfs.img

?????? <5> 燒寫到開發(fā)板 (rootfs.img) --- 固化到10M出(/drivers/mtd/nand/s3c_nand.c文件)

????????????? tftp30000000 rootfs.img

????????????? nanderase a00000 1400000

????????????? nandwrite.yaffs 30000000 a00000 實(shí)際img大小

環(huán)境變量設(shè)置:

?????? nfs:setenvbootargs console=ttySAC0 root=/dev/nfs rwnfsroot=192.168.1.8:/home/libang/nfs/roof/ip=192.168.1.6:192.168.0.1::255.255.255.0::eth0:off init=/linuxrc

?????? yaffs2:setenvbootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=yaffs2 rw init=/linuxrc

?

6.下載到開發(fā)板總結(jié)

?????? u-boot.bin?? uImage??rootfs.img

固化u_boot:tftp 30000000u-boot.bin

?????? ?? nand erase 0 100000

?????? ?? nand write 30000000 0 100000

固化Kernel:tftp 30000000 uImage

?????? ?? nand erase 500000 500000

?????? ?? nand write 30000000 500000 500000

固化fs:tftp 30000000rootfs.img

?????? ?? nand erase a00000 1400000

?????? ?? nand write.yaffs 30000000 a00000 1400000

引導(dǎo)內(nèi)核:setenv read 30000000500000 500000\;bootm 30000000

引導(dǎo)文件系統(tǒng): 開發(fā)使用--(nfs) setenv bootargsconsole=ttySAC0 root=/dev/nfs rw nfsroot=192.168.1.8:/home/libang/nfs/roof/ip=192.168.1.6:192.168.0.1::255.255.255.0::eth0:off init=/linuxrc?????? (啟動(dòng)nfs:/etc/init.d/nfsrestart)

????????????? ??? 產(chǎn)品使用--- (yaffs2)setenvbootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=yaffs2 rw init=/linuxrc

?

7.內(nèi)核架構(gòu)

(1) 系統(tǒng)調(diào)用接口SCI (System Call Interface):SCI層為用戶空間提供了一套標(biāo)準(zhǔn)的系統(tǒng)調(diào)用函數(shù)來(lái)訪問(wèn)Linux內(nèi)核,搭起了用戶空間到內(nèi)核空間的橋梁.

(2) 進(jìn)程管理PM (Process Management):進(jìn)程管理的重點(diǎn)是創(chuàng)建進(jìn)程(fork、exec),停止進(jìn)程(kill、exit),并控制它們之間的通信(signal 或者 POSIX 機(jī)制).進(jìn)程管理還包括控制活動(dòng)進(jìn)程如何共享CPU,即進(jìn)程調(diào)度.

(3) 虛擬文件系統(tǒng)VFS (Virtual File System):VFS(虛擬文件系統(tǒng))隱藏各種文件系統(tǒng)的具體細(xì)節(jié),為文件操作提供統(tǒng)一的接口

(4) 內(nèi)存管理MM (Memory Management):內(nèi)存管理的主要作用是控制多個(gè)進(jìn)程安全地共享內(nèi)存區(qū)域

(5) 網(wǎng)絡(luò)協(xié)議棧 (Network Stack):內(nèi)核協(xié)議棧為L(zhǎng)inux提供了豐富的網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)

(6) Arch:CPU

(7) 設(shè)備驅(qū)動(dòng)DD (Device Drivers):Linux內(nèi)核中有大量代碼都在設(shè)備驅(qū)動(dòng)程序中,它們控制特定的硬件設(shè)備

?

8.內(nèi)核源代碼 (不允許在windows下解壓,windows下不區(qū)分大小寫)

(1) 下載內(nèi)核源代碼

?????? www.kernel.com--- linux

(2) 內(nèi)核目錄結(jié)構(gòu) (樹狀)

Linux內(nèi)核源代碼采用樹形結(jié)構(gòu)進(jìn)行組織,非常合理地把功能相關(guān)的文件都放在同一個(gè)子目錄下,使得程序更具可讀性

?????? <1>Arch:特定體系結(jié)構(gòu)相關(guān)代碼,內(nèi)核所支持的每種架構(gòu)的 CPU 的相關(guān)目錄集合,在 arch 目錄下,有支持 arm 的目錄、支持 x86的目錄和支持 mips 的目錄等,如:arch/arm、arch/x86 和arch/mips 等

?????? <2>block:塊設(shè)備通用函數(shù)

?????? <3>Document:內(nèi)核源碼說(shuō)明文檔目錄

?????? <4>drives:設(shè)備驅(qū)動(dòng)程序目錄集合, drivers 里的某一子目錄對(duì)應(yīng)著內(nèi)核中的某一種驅(qū)動(dòng)程序,如:drivers/char 為字符設(shè)備驅(qū)動(dòng)程序、drivers/block 為塊設(shè)備驅(qū)動(dòng)程序,drivers/net 為網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序、drivers/usb為usb總線設(shè)備驅(qū)動(dòng)程序、drivers/i2c為i2c總線設(shè)備驅(qū)動(dòng)程序等

???? <5>fs:Linux支持的文件系統(tǒng)的代碼(包括虛擬文件系統(tǒng) VFS),每個(gè)子目錄對(duì)應(yīng)一種文件系統(tǒng),比如 fs/jffs2/、fs/cramfs、fs/ext2/

?????? ||--devpts/* /dev/pts虛擬文件系統(tǒng)*/

?????? ||--ext2/*第二擴(kuò)展文件系統(tǒng)*/

?????? ||--fat/*MS的fat32文件系統(tǒng)*/

?????? ||--isofs/*ISO9660光盤cd-rom上的文件系統(tǒng)*/

?????? <6>include:內(nèi)核的頭文件目錄,如:基本的頭文件(存放在include/linux目錄下)、各種驅(qū)動(dòng)或功能部件的頭文件(比如 include/media、include/video/、include/net)

?????? <7>init:內(nèi)核的初始化代碼(不是內(nèi)核的引導(dǎo)代碼),其中 main.c 文件中的start_kernel 函數(shù)是內(nèi)核引導(dǎo)后運(yùn)行的第一個(gè)函數(shù)

?????? <8>kernel:內(nèi)核管理的核心代碼,與處理器相關(guān)的代碼位于 arch/../kernel目錄下

?????? <9>net目錄

????????????? 網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)代碼

????????????? ||--802?????? /*802無(wú)線通訊協(xié)議核心支持代碼*/

????????????? ||--appletalk???????? /*與蘋果系統(tǒng)連網(wǎng)的協(xié)議*/

????????????? ||--ax25???????????? /*AX25無(wú)線INTERNET協(xié)議*/

????????????? ||--bridge????????????? /*橋接設(shè)備*/

????????????? ||--ipv4????????? /*IP協(xié)議族V4版32位尋址模式*/

????????????? ||--ipv6???????? ?????/*IP協(xié)議族V6版*/?

總結(jié)

以上是生活随笔為你收集整理的TQ210——下载总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。