ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:23.79KB ,
资源ID:4471468      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4471468.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Tiny6410开发板Linux系统自学笔记.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Tiny6410开发板Linux系统自学笔记.docx

1、Tiny6410开发板Linux系统自学笔记Tiny6410开发板Linux系统自学笔记 一、嵌入式Linux系统 自学计划:0、学习嵌入式Linux系统启动、加载的工作原理。1、搭建针对目标CPU的Linux编译环境。2、移植、编译针对目标CPU单板的Bootloader。3、移植、编译针对目标CPU单板的Linux内核。4、制作用于Linux内核启动的根文件系统。4、定制、开发针对目标CPU单板的硬件驱动程序。5、开发基于嵌入式Linux平台的应用程序。二、参考文档:ARM学习报告13嵌入式Linux入门笔记嵌入式Linux性能详解Tiny6410 Linux开发指南6410 BootLo

2、ader启动过程分析:S3C6410支持从SD卡或Nand FLASH直接启动,但是实际上板子上电后,会首先执行芯片内部iRom中的代码,iROM中的代码会根据GPN15:13的管脚来判断从哪个存储设备中读取4KB的启动代码,并放入SteppingStone中运行,这段代码被称为Bootloader1(BL1)。【因为SteppingStone 是SRAM,所以不需要初始化就可以使用】所以,整个启动过程可以分成BL0, BL1, BL2 三个阶段, 其中BL0是固化在s3c6410内部的iROM中的,1、BL0处理流程如下图所示2、BL1的处理流程对于SD卡, BL1代码位于(totalSec

3、tor - 18) 的扇区对于SDHC卡,BL1代码位于(totalSector-1042)的扇区对于NANDFLASH,BL1代码位于最前面的4K空间因为最终的系统需要运行在DDR内存中,所以,BL1首先需要执行DDR的初试化,然后再将GPN15:13管脚指定的存储设备中bootloader代码(BL1+BL2)拷贝到DDR中,然后重定位到编译器编译时指定的位置,然后跳转。3、此时,DDR中的BL2就是完成一些复杂的初始化,以及很多辅助调试功能,比如网络命令,usb命令,nand命令等等,最后执行你的bootcmd,将内核加载到指定位置,将bootargs放到指定位置,传递给内核mach_t

4、ype,bootargs的存放地址,然后跳转到内核执行,到这里bootloader就完成使命然后消失了。所以说我们可以认为BLx是bootloader的几个阶段,其实如果只是基本功能的话,完全可以将代码压缩到8K以内,那么就不需要重定位,编译的时候直接从0地址开始就行了。 五、BL2将Linux内核加载到RAM的原理分析BL1的主要工作包括:1、硬件设备初始化2、加载U-Boot第二阶段代码到RAM空间3、设置好栈4、跳转到第二阶段代码入口 BL2的主要工作包括:1、初始化本阶段使用的硬件设备2、检测系统内存映射3、将内核从Flash读取到RAM中4、为内核设置启动参数5、调用内核 1、BL1

5、结束之后,BL2执行之前,系统内存的使用情况 2、嵌入式LInux设备NAND FLASH上典型的空间分配情况: 如上图所示,Boot Loader文件、内核启动参数、内核文件和根文件系统的镜像文件, 这四个文件从FLASH的低地址开始依次保存。6410大致启动过程是:芯片上电找到NAND FLASH起始地址上保存的Boot Loader并运行,Boot Loader读取内核启动参数,再将内核文件和根文件系统的镜像文件加载到RAM中运行。所以,我们后面的学习目标就是如何为特定的CPU和目标单板生成 上述四个系统文件,以及它们的系统工作原理。三、6410系统内存分配:ARM CPU采用统一存储空

6、间映射,将各种存储设备:寄存器,ROM,RAM,Flash都映射到这一地址空间。S3C6410的物理内存分成Memory和Pheriperal两部分,地址范围分别为0x00x6fffffff 和 0x7000_00000x7fffffff。Memory,又叫主内存,分为4大区域,分别是启动镜像区、内部内存区、静态内存区、动态内存区0x0000_00000x07FF_FFFF 128MB 启动镜像区0x0800_00000x0BFF_FFFF 64MB 内部内存区ROM0x0C00_00000x0FFF_FFFF 64MB 内部内存区RAM 【Stepping Stone(8KB)】启动镜像区物

7、理地址为0x000000000x07ffffff,共128MB。这个区域的作用正如它的名字所述,是用来启动系统的。但是这个范围内并没有实际的存储介质与之对应,只能在通过OM4:0选择具体的启动介质后再把相应介质的物理地址映射到这个启动区,比如说选择了IROM 启动方式后,就把IROM所占的地址空间映射为0x00000000开始的空间。内部内存区物理地址为0x080000000x0fffffff,共128MB。这个区域对应着内部的内存地址,内部的ROM和SRAM都是分布在这个区间。其中,0x080000000x0bffffff对应着内部ROM,当然实际上内部的ROM也并没有64MB这么多,只有3

8、2KB是有实际存储介质的,这32KB是一个只读区,放的是IROM方式下的启动代码,选择IROM启动的时候首先运行的代码就是这一部分,称为BL0,这部分代码由厂家固化。0x0c0000000x0fffffff对应内部SRAM,实际可用的SRAM按照三星的手册是4KB,其实这就是用于nand flash启动的Steppingstone。/ 静态存储区 0x1000_00000x3FFF_FFFF 3*128MB0x1000_00000x17FF_FFFF 128MB0x1800_00000x1FFF_FFFF 128MB DM9000AEP0x2000_00000x27FF_FFFF 128MB0

9、x2800_00000x2FFF_FFFF 128MB0x3000_00000x37FF_FFFF 128MB0x3800_00000x3FFF_FFFF 128MB静态内存区物理地址为0x100000000x3fffffff,共3*128MB。这个区域用于访问挂在外部总线上的设备,比如说SRAM、NOR flash、oneNand等。当映射到这些器件的时候这些bank的地址也不能再使用了,访问这些非线性存储器还是得通过Pheriperal空间的AHB总线进行,和S3C2410中的访问方式是一样的。/ 动态存储区 0x4000_00000x6FFF_FFFF 3*256MB0x4000_000

10、00x47FF_FFFF 128MB0x4800_00000x4FFF_FFFF 128MB0x5000_00000x5FFF_FFFF 256MB DDR RAM0x6000_00000x6FFF_FFFF 256MB DDR RAM动态内存区物理地址为0x400000000x6fffffff,共3*256MB。其中第一个256MB为保留区,实际使用的动态内存区为 0x500000000x6fffffff,又分为2个区间,分别占256MB,可以通过DMC的Xm1CS1:0来进行着2个区间的选择。这个内存区主要是扩展DRAM,最大可以扩展512MB的DRAM。/ 外设地址空间0x7000_00

11、000x7xxx_xxxx 六、搭建针对目标CPU的Linux编译环境1、建立Linux 开发环境,首先安装Linux系统,为了新手学习简单,建议用vmware虚拟机安装Linux系统,实际商业开发过程,这种方式可能不够严谨。2、安装Linux交叉编译工具链:我们使用的是arm-linux-gcc-4.5.1,它默认采用armv6指令集,支持硬浮点运算,下面是安装它的详细步骤。Step1:将arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz 复制到Linux系统的某个目录下如tmp/,然后进入到该目录,执行解压命令:#cd /tmp#tar xvzf arm-lin

12、ux-gcc-4.5.1-v6-vfp-20101103.tgz C /注意:C 后面有个空格,并且C 是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。/表示解压到根目录,这里执行该命令,将把 arm-linux-gcc 安装到/opt/FriendlyARM/toolschain/4.5.1 目录。【Linux系统压缩文件的格式说明】*.Z compress 程序的压缩档案; *.gz gzip 程序压缩的档案; *.bz2 bzip2 程序压缩的档案; *.tar tar 程序打包的数据,并没有压缩过; *.tar.gz tar 程序打包的档案,其中并且经过 gz

13、ip 癿压缩 *.tar.bz2 tar 程序打包的档案,其中并且经过 bzip2 癿压缩【tar命令的参数说明】:-c :建立打包档案,可搭配 -v :察看过程中被打包的文件名 -t :察看打包档案癿内容吨有哪些的文件名 -x :解打包或解压缩,可以搭配 -C (大写) 在特定目录解开 特别留意的是, -c, -t, -x 不可同时出现。 -j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2 -z :透过 gzip 癿支持迚行压缩/解压缩:此时档名最好为 *.tar.gz -v :在压缩/解压缩的过程中,将正在处理的文件名显示出来 -f filename:-f

14、 后面要立刻接要被处理的文件名 -C 目录 :这个选顷用在解压缩,若要在特定目录解压缩,可以使用这个选顷。Step2:把编译器路径加入系统环境变量,运行命令。#gedit /root/.bashrc编辑/root/.bashrc 文件,注意“bashrc”前面有一个“.”,修改最后一行为export PATH=$PATH: /opt/FriendlyARM/toolschain/4.5.1/bin注意路径一定要写对,否则将不会有效。重新登录系统(不必重启机器,开始->logout 即可),使以上设置生效,在命令行输入arm-linux-gcc v,会出现如下信息,这说明交叉编译环境已经成

15、功安装。 【反编译工具:arm-linux-objdump】【ELF文件查看工具:arm-linux-readelf 】七、Bootloader文件的原理、移植和编译1、uboot代码移植首先执行如下命令,分别创建工作目录/opt/FriendlyARM/mini6410/linux和临时目录,并把光盘中linux 目录中的所有文件都复制到/tmp/linux 目录中,#mkdir p /opt/FriendlyARM/mini6410/linux#mkdir /tmp/linux然后在工作目录/opt/FriendlyARM/mini6410/linux 中执行解压安装U-boot 源代码#

16、tar xvzf /tmp/linux/ u-boot-mini6410-20101106.tar.gz将u-boot代码加压到opt/FriendlyARM/mini6410/linux/u-boot-mini6410目录下。uboot代码目录结构:板级移植需要修改的板级配置文件:2、uboot代码编译在 opt/FriendlyARM/mini6410/linux/u-boot-mini6410目录下找到makefile文件,打开文件可以看到几个相关的编译选项,如下:mini6410_nand_config-ram128 / 为系统内存128M,从NANDFLASH启动的设备生成编译配置文

17、件mini6410_sd_config-ram128 / 为系统内存128M,从SD卡启动的设备生成编译配置文件mini6410_nand_config-ram256 / 为系统内存256M,从NANDFLASH启动的设备生成编译配置文件mini6410_sd_config-ram256 / 为系统内存256M,从SD卡启动的设备生成编译配置文件进入uboot源代码根目录:cd /opt/FriendlyARM/mini6410/linux/u-boot-mini6410生成配置文件:make mini6410_nand_config-ram256 开始编译:make 最终生成u-boot.b

18、in文件,用于下载到FLASH上。为了便于区分,可以将u-boot.bin文件改名为u-boot_nand-ram256.bin。 另外,我们也可以选择编译用于SD卡启动的uboot文件。要把新编译生成的u-boot.bin下载到开发板的FLASH上,需要先用SD卡上的uboot启动6410开发板,SD卡启动在串口下显示如下用户菜单: f:输入f,格式化FLASH,如上图所示,v:输入v,将uboot.bin文件下载到FLSAH上,如下图所示:注意,下载uboot时需要使用dnw.exe工具,且只有先输入v以后,dnw.exe工具上的状态才会显示USB:ok 将uboot下载到FLASH以后,

19、切换启动开关后,单板重新上电,启动FLASH上的uboot,如下图所示: 上面菜单中的选项,首先要了解k,下载linux内核镜像文件,下载内核文件之前,我们需要先编译得到linux内核文件。八、Linux内核文件的原理、移植和编译1、Liinux内核代码移植进入工作目录/opt/FriendlyARM/mini6410/linux 执行,如下命令,生成生成linux-2.6.38 目录,如下图所示#tar xvzf /tmp/linux/ linux-2.6.38-20110325.tar.gz 2、Linux内核代码编译,首先进入linux-2.6.38 目录, 【1】清除原有的配置文件和中

20、间文件#make distclean【2】配置内核,生成新的配置文件 .config #make menuconfig ARCH=armTiny6410开发板已经为我们准备好了相关的配置文件,所以这一步可以省略。Tiny6410原配的是4.3寸的触摸屏,所以使用config_mini6410_n43作为内核编译的配置文件。【3】编译内核#make uImage ARCH=arm CROSS_COMPILE=arm-linux-输入#make zImage,开始编译内核,在arch/arm/boot 目录下生成linux 内核映象文件zImage。将编译得到的内核镜像文件zImage通过uboo

21、t下载到FLASH上运行,内核在启动期间进行的最后操作之一就是安装根文件系统,并读取根文件系统中的配置文件,所以接下来我们要学习根文件系统。 九、制作用于Linux内核启动的根文件系统1、根文件系统的作用和工作原理 首先,根文件系统是Linux(或者说是UNIX类)操作系统运行时所需要的特有文件系统。根文件系统不仅具有普通文件系统的存储数据文件的功能,还被操作系统用来存储运行时所需要的一些特殊文件。这些特殊文件包括:busybox (提供 shell 命令集)、配置文件(通常位于/etc目录下用来初始化和布局你的文件系统)、设备文件(位于/dev目录下)、必要的库文件。设备文件实际上保存着对应

22、设备的一些相关参数,操作系统通过使用它们来与应用程序进行接口,并与设备进行交互。因此根文件系统是Linux运行时所必须的。 另外,为了让内核文件的大小合适,不可能把所有的功能都编译到内核文件中,所以有些内核需要的功能是以内核模块的形式存在的(例如一些驱动程序)。为了使内核文件在运行的时候可以找到并加载这些内核模块, 就需要将内核模块保存在根文件系统中。其实根文件系统就是一个普通的文件,它的制作过程是:(1)按照Linux内核要求,制作根文件系统的所需要的根目录和子目录,(2)将内核运行需要的文件编译并保存到正确的目录,(3)使用专门的工具将整个目录转换成合适的镜像文件,这个文件可以直接烧写到存

23、储设备上去。2、手动创建根文件系统目录和文件:这个工作和系统的存储介质无关#mkdir rootfs#cd rootfs#mkdir bin dev etc lib proc sbin sys usr mnt tmp var#mkdir usr/bin usr/lib usr/sbin lib/modules(2)创建设备文件(如果不创建这两个设备文件,在文件系统启动时会出现错误信息,不能初始化控制台。)#cd dev/#mknod -m 666 console c 5 1#mknod -m 666 null c 1 3#cd. (3)安装/etc目录/etc目录下是一些配置文件etc/ini

24、ttab etc/profile etc/fstab etc/init.d/rcs和具体硬件无关,各种机器上的这些配置文件大同小异可以复用。因为这些配置文件和系统启动相关,所以在学习配置文件之前,先简单了解一下系统的启动过程:在linux内核启动到start_kernel()函数的最后,通过调用init()函数,创建第一个核心线程,核心线程主要进行一些外设初始化工作,包括调用do_basic_setup()完成外设及其驱动程序的加载和初始化,完成文件系统初始化和root文件系统的安装。当do_basic_setup()函数返回init(),init()又打开了/dev/console设备,重定

25、向三个标准的输入输出文件stdin、stdout和stderr到控制台,最后,搜索文件系统中的init程序(sbin目录下的init文件,其实也是busybox文件)或者由init=命令行参数指定的程序,并使用 execve()系统调用加载执行init程序。此时Linux完成内核启动,开始运行init程序,init程序需要读取配置文件/etc/inittab。所以inittab是系统执行的第一个配置文件。当 Busybox 的初始化程序执行时,首先试图在/etc 下查找启动文件inittab,如果找到则按照inittab 文件定义的顺序执行;如果找不到inittab,则默认执行/etc/ini

26、t.d/rcS 脚本,之后启动相应的 shell。在 Busybox 的inittab 文件中,通常定义系统初始化时执行的也是/etc/init.d/rcS 脚本。也就是说,无论inittab 文件的存在与否,Busybox 初始化时,都会先执行rcS 脚本。所以,接下来我们需要学习的是:1、inittab文件结构2、rcS脚本语法 inittab文件中每个登记项的结构都是一样的,分别以冒号“:”分隔的4个字段。具体如下: identifier : run_level : action : process 其中,各字段以及与其相关的说明如下: identifier:登记项标识符,最多为4个字符

27、。用于惟一地标识/etc/inittab文件中的每一个登记项 run_level:系统运行级,即执行登记项的init级别。用于指定相应的登记项适用于哪一个运行级,即在哪一个运行级中被处理。如果该字段为空,那么相应的登记项将适用于所有的运行级。在该字段中,可以同时指定一个或多个运行级,其中各运行级分别以数字0.1.2.3.4.5.6或字母a、b、c表示,且无需对其进行分隔。action:动作关键字。用于指定init进程对相应进程(在“process”字段定义)所实施的动作。具体动作包括: 1、boot: 2、bootwait: 3、initdefault: 4、off: 5、once: 6、on

28、demand: 7、powerfail 8、powerwait 9、respawn 10、sysinit 11、wait:process:所要执行的shell命令。任何合法的shell语法均适用于该字段。嵌入式Linux系统的inittab文件没有运行级别的概念,所以大致的内容如下::sysinit:/etc/init.d/rcS # 指定系统启动后首先执行的文件:respawn:-/bin/login -f root # 自动作为root账户登录:askfirst:-/bin/sh # 类似respawn,它将会促使init在控制台上显示“Please press Enter to acti

29、ve this console”的信息,并在重新启动之前等待用户按下enter键:ctrlaltdel:/sbin/reboot # 设置ctrl+alt+del键对应的动作(重启文件系统):shutdown:/bin/umount -a -r # 设置关机时对应的动作(卸载所有文件系统):restart:/sbin/init # 设置系统重启时对应的动作(运行的init程序)创建etc/init.d/rcS文件:rcS文件是一个脚本文件,借助这个脚本可以设置各种程序开机后自动运行,也可进行其他系统设置,类似于Windows系统中的自动批处理文件。#!/bin/sh # 符号#!用来告诉系统它

30、后面的参数是用来执行该文件的程序PATH=/sbin:/bin:/usr/sbin:/usr/bin # 首先设置了PATH环境变量,只是为了后续命令使用方便runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel /bin/hostname zinix /bin/mount -n -t usbfs none /proc/bus/usbecho /sbin/mdev > /proc/sys/kernel/hotplug/sbin/mdev -s/bin/hotplug# mounting file system spe

31、cified in /etc/fstabmkdir -p /dev/ptsmkdir -p /dev/shm注意最后还要改变它的属性使它能够执行 创建etc/fstab文件:fstab文件描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作device mount-point type options dump fsck order文件中各字段的意义如下:1)device:要挂接的设备,如/dev/mtdblockl;2)mount-point:挂接点;3)type:文件系统类型;4)options:挂接参数,以逗号隔开;5)dump和fsck order:用来

32、决定控制dump、fsck程序的行为。创建用户和组文件:在etc目录下增加passwd和group两个文件。首先增加passwd文件,passwd一共由7个字段组成,6个冒号将其隔开。其含义分别为:1)用户名;2)是否有加密口令,x表示有,不填表示无,采用MD5、DES加密;3)用户ID;4)组ID;5)注释字段;6)登录目录;7)所使用的shell程序。passwd的内容为root:x:0:0:root:/root:/bin/sh只有增加了passwd文件,启动以后命令行才会显示rootzinix /# ,否则只会显示zinix /# group共由4个字段组成,3个冒号将其隔开。含义分别为:1)组名;2)是否有加密口令,同passwd;3)组

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1