使用uboot去挂载根文件系统

合集下载

根文件系统(rootfs)

根文件系统(rootfs)

根文件系统(rootfs)展开全文一、根文件系统的作用是linux挂载的第一个文件系统,rootfs包含shell命令、linux系统配置文件(文件系统的挂载、网络服务、用户名、主机名、用户密码、环境变量...)、linux应用程序、应用程序处理的数据、独立的驱动模块(*.ko)。

根文件系统,相当于linux内核外围的一个应用环境。

====================================== ========================================= =========================二、控制台输出:[ 4.183226] yaffs: dev is 32505860 name is "mtdblock4" rw //存放rootfs的设备名字mtdblock4 ,rw可读写[ 4.183291] yaffs: passed flags ""[ 4.337878] VFS: Mounted root (yaffs filesystem) on device 31:4. //31:4 --》主设备:次设备号[ 4.338028] Freeing init memory: 536K ---->rootfs挂载成功,释放内核中一些初始化函数所占用的内存[ 4.357023] usb 1-1: New USB device found, idVendor=1a40, idProduct=0101[ 4.357083] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0[ 4.357145] usb 1-1: Product: USB 2.0 Hub[ 4.357747] hub 1-1:1.0: USB hub found[ 4.357852] hub 1-1:1.0: 4 ports detected[ 5.886184] smdkc110-rtc smdkc110-rtc: rtc disabled, re-enabling[ 6.086924] eth0: link down[ 6.087198] ADDRCONF(NETDEV_UP): eth0: link is not ready[root@YueQian /]#[root@YueQian /]#[root@YueQian /]#[root@YueQian /]#最小的根文件系统的内容:# ls /bin home media proc sys usrdev lib mnt root tmp varetc lost+found opt sbin====================================== ========================================= =========================三、根文件系统启动过程1、uboot的启动参数:init=/linuxrcinit是linux运行时的第一个进程,该进程执行的是/linuxrc 其中linuxrc -> bin/busyboxinit=/sbin/init 其中:init -> ../bin/busybox--------------------------------------------------------------------------------------------------------2、内核启动后,首先通过vfs去挂在rootfs,然后再执行init=/linuxrc ,linuxrc是busybox这个工作生成的文件。

《uboot环境变量:详谈bootcmd和bootargs》

《uboot环境变量:详谈bootcmd和bootargs》

《uboot环境变量:详谈bootcmd和bootargs》1.uboot中的环境变量bootdelay:执⾏⾃动启动的等候秒数baudrate:串⼝控制台的波特率netmask:以太⽹接⼝的掩码ethaddr:以太⽹卡的⽹卡物理地址bootfile:缺省的下载⽂件bootargs:传递给内核的启动参数bootcmd:⾃动启动时执⾏的命令serverip:服务器端的ip地址ipaddr:本地ip 地址stdin:标准输⼊设备stdout:标准输出设备stderr:标准出错设备 以上是⼀些基本的环境变量。

uboot中⼀般会有⼀些缺省的环境变量。

在启动uboot后会将参数放在特定的FLASH区域,之后由kernel去获取解析。

还有另⼀种⽅法设置环境变量就是在uboot启动后进⼊命令⾏模式,设置环境变量,然后执⾏saveenv后,会将设置的环境变量保存到特定区域的FLASH中,由kernel去获取解析。

其中bootargs和bootcmd相对⽐较重要。

2.bootargs解析root: ⽬前很多新的开发板都是使⽤FLASH作为存储。

因为很多都直接使⽤MTD驱动程序。

MTD 驱动程序的主要优点在于 MTD 驱动程序是专门为基于闪存的设备所设计的,所以它们通常有更好的⽀持、更好的管理和基于扇区的擦除和读写操作的更好的接⼝。

Linux 下的 MTD驱动程序接⼝被划分为两类模块:⽤户模块和硬件模块。

有两个流⾏的⽤户模块可启⽤对闪存的访问: MTD_CHAR 和 MTD_BLOCK 。

MTD_CHAR 提供对闪存的原始字符访问,⽽ MTD_BLOCK 将闪存设计为可以在上⾯创建⽂件系统的常规块设备(象 IDE 磁盘)。

与MTD_CHAR 关联的设备是 /dev/mtd0、mtd1、mtd2(等等),⽽与 MTD_BLOCK 关联的设备是 /dev/mtdblock0、mtdblock1(等等)。

由于 MTD_BLOCK 设备提供象块设备那样的模拟,通常更可取的是在这个模拟基础上创建象 FTL 和 JFFS2 那样的⽂件系统。

uboot命令

uboot命令

uboot命令U-boot基础现在为Linux开放源代码Bootloader有很多,blob、redboot 及U-BOOT等,其中U-BOOT是目前用来开发嵌入式系统引导代码使用最为广泛的Bootloader。

它支持POWERPC、ARM、MIPS和 X86等处理器,支持嵌入式操作系统有Linux、Vxworks及NetBSD等。

2.1 U-boot源代码目录结构|-- board 平台依赖,存放电路板相关的目录文件|-- common 通用多功能函数的实现|-- cpu 平台依赖,存放cpu相关的目录文件|-- disk 通用。

硬盘接口程序|-- doc 文档|-- drivers 通用的设备驱动程序,如以太网接口驱动|-- dtt|-- examples 应用例子|-- fs 通用存放文件系统的程序|-- include 头文件和开发板配置文件,所有开发板配置文件放在其configs 里|-- lib_arm 平台依赖,存放arm架构通用文件|-- lib_generic 通用的库函数|-- lib_i386 平台依赖,存放x86架构通用文件|-- lib_m68k 平台依赖|-- lib_microblaze 平台依赖|-- lib_mips 平台依赖|-- lib_nios 平台依赖|-- lib_ppc平台依赖,存放ppc架构通用文件|-- net 存放网络的程序|-- post 存放上电自检程序|-- rtc rtc的驱动程序`-- tools 工具详细实例:board:开发板相关的源码,不同的板子对应一个子目录,内部放着主板相关代码。

Board/at91rm9200dk/at91rm9200.c, config.mk, Makefile, flash.c ,u-boot.lds等都和具体开发板的硬件和地址分配有关。

common:与体系结构无关的代码文件,实现了u-boot所有命令,其中内置了一个shell脚本解释器(hush.c, a prototype Bourne shell grammar parser), busybox中也使用了它。

烧写ARM开发板系统教程-----uboot、内核以及文件系统

烧写ARM开发板系统教程-----uboot、内核以及文件系统

烧写ARM开发板系统教程-----uboot、内核以及⽂件系统⼀、sd启动将u-boot镜像写⼊SD卡,将SD卡通过读卡器接上电脑(或直接插⼊笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.(内存卡的节点)。

当有多个交叉编译器是,不⽅便设置环境变量时,可以在编译命令中指定交叉编译器,具体如下:在源码中操作以下步骤:make distcleanmake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- mrpropermake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_configmake ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- all spl编译出tiny210-uboot.bin,注意交叉编译⼯具路径执⾏下⾯的命令$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1把内存卡插⼊开发板,使⽤串⼝⼯具设置环境变量:setenv gatewayip 192.168.1.1(电脑⽹关)setenv ipaddr 192.168.1.102(开发板ip,不要与虚拟机和电脑ip冲突)setenv netmask 255.255.255.0setenv serverip 192.168.1.10(虚拟机ip)saveenv⼆、nand启动烧写Uboot:通过SD卡启动的u-boot for tiny210 将u-boot镜像写⼊nandflash在虚拟机下重启tftp sudo service tftpd-hpa restart开发板终端下执⾏下⾯的命令:[FriendlyLEG-TINY210]# tftp 21000000 tiny210-uboot.bin[FriendlyLEG-TINY210]# nand erase.chip[FriendlyLEG-TINY210]# nand write 21000000 0 3c1f4 (写⼊长度)内核的烧写位置是0x600000开始的区域,⽂件系统烧写位置为0xe00000开始的区域。

嵌入式系统工程师常见面试题

嵌入式系统工程师常见面试题

嵌入式系统工程师常见面试题在嵌入式系统工程领域,面试是企业筛选合适人才的重要环节。

以下是一些常见的嵌入式系统工程师面试题,涵盖了硬件、软件、操作系统等多个方面。

一、硬件相关1、请简述一下电阻、电容、电感的基本特性及其在电路中的作用。

电阻主要用于限制电流、分压和产生热量。

电容可以存储电荷,用于滤波、耦合和定时等电路。

电感则能储存磁场能量,常用于滤波、谐振和变压器等。

2、解释一下什么是 PCB(印刷电路板)布线的阻抗控制,以及为什么它很重要?PCB 布线的阻抗控制是确保信号在传输过程中保持稳定和减少反射的关键。

不同的信号速率和频率对阻抗有特定要求。

如果阻抗不匹配,会导致信号失真、噪声增加和传输错误,影响系统的性能和可靠性。

3、谈谈你对ADC(模数转换器)和DAC(数模转换器)的理解,包括它们的工作原理和主要性能指标。

ADC 将模拟信号转换为数字信号,工作原理有逐次逼近型、积分型等。

主要性能指标包括分辨率、转换精度、转换速度等。

DAC 则相反,将数字信号转换为模拟信号。

其性能指标类似 ADC,但还包括建立时间等。

4、如何降低系统的功耗,特别是在嵌入式设备中?可以从多个方面入手,如选择低功耗的芯片和器件,优化电路设计,合理设置电源管理模式,采用动态电压频率调整技术,以及在软件中控制硬件模块的电源开关等。

二、软件相关1、解释一下什么是中断,以及在嵌入式系统中如何处理中断?中断是指 CPU 在执行正常程序时,由于外部事件或内部异常而暂停当前程序,转而去执行相应的中断服务程序。

在嵌入式系统中,需要设置中断向量表,配置中断优先级,编写中断服务程序,并确保中断处理的及时性和准确性。

2、描述一下你对实时操作系统(RTOS)的理解,以及它与普通操作系统的区别。

实时操作系统强调任务的确定性和及时性,能在规定的时间内完成关键任务。

与普通操作系统相比,它具有更短的中断响应时间、更严格的任务调度策略和更高的可靠性。

3、谈谈你对 C 和 C++在嵌入式系统开发中的应用和优缺点。

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

2440超详细U-BOOT(UBoot介绍+H-jtag使用+Uboot使用)

凌FL2440超详细U-BOOT作业(UBoot介绍+H-jtag使用+Uboot使用)Bootloader是高端嵌入式系统开发不可或缺的部分。

它是在操作系统内核启动之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

现在主流的bootloader有U-BOOT、vivi、Eboot等。

本次作业先做Uboot的烧写吧。

希望通过这个帖子,能让更多的初学者朋友了解一些UBoot的知识,也希望高手朋友对我的不足予以斧正。

首先说一下什么是Uboot:U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。

从FAD SROM、8xxROM、PPCBOOT逐步发展演化而来。

其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

但是U-Boot不仅仅支持嵌入式Linu x系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。

其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。

这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。

这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

IMX283学习笔记 - 10月更新

IMX283学习笔记 - 10月更新

我的EasyARM-i.MX283学习笔记1、前记 .......................................................................................................................... - 1 -初学第一阶段计划 (1)2、关于IMX283A开发板 ............................................................................................... - 3 -3、EASYARM-I.MX283学习-----5个月我学了什么? ....................................................... - 5 -关于接下来该学习什么,怎么学习做一个规划: (6)4、EASYARM-I.MX283学习之点亮LED灯....................................................................... - 6 -1、按照教程安装好ECLIPSE:参照10.4节的做法 (6)2、操作步骤 (6)1、前记对于ARM9没有什么基础,硬要说对ARM了解的话,我会STM32,也算对ARM半个入门了。

去年看到ZLG的IMX283开发套件时,那时很想买,但终究没买。

究其原因,当时正在学习STM32。

其实我作为硬件工程师(自诩),学习过很多单片机,例如51、MSP430、STM32,当然还有专业课上的FPGA当然,已有一年多没接触了。

这些芯片,可要说会也不是特别精通,可要说不会但毕竟也学过一段时间。

这一路过来,反正也是懵懵懂懂,图个新鲜感。

很多东西学过后就忘记了,现在呢就养成了写一些自学笔记的习惯。

然而大多说自学笔记都是以初学者的眼光和思维去看待和解决问题。

烧写内核代码及tftp及bootfs的挂载

烧写内核代码及tftp及bootfs的挂载

Fedora14下烧写uboot到sd卡,烧写内核代码到nangflash ,挂载ntfs文件系统到s5pv210前几天在老师的指导下完成了s5pv210的u-boot及内核代码的烧写和挂载netfs文件系统,今天抽时间再总结一下,主要是对中间出现的问题及解决方案。

希望对有需要的人有所帮助。

环境:fedora 14 s5pv210开发板vwarm9.0需要准备的:uImage 、tiny210v2-uboot.bin 、rootfs_qtopia_qt4.img一.首先先把u-boot 烧到sd卡里面代码:dd iflag= dsync oflag=dsync if= tiny210v2-uboot.bin of=/dev/sdb seek=1说明:这一步比较简单,没什么问题烧写完毕后,开发板上电,以root权限进入minicom进入u-boot 界面。

二、准备烧写内核代码1、配置TFTP服务器为了安装TFTp服务器及客户端,需要连接网络,为方便起见,本人建议,开启虚拟机之前首先调节网络模式为NET模式,这样主机只要能连上网,虚拟机就能上网,可以通过YUN 工具进行TFTP服务器的安装代码:#yum install tftp-server //安装TFTP服务器# yum install –y tftp //安装TFTP客户端–y 参数表示同意下载配置TFTP环境创建共享目录:#mkdir /var/lib/tftpboot打开修改配置文件:#vim /etc/xinetd.d/tftp修改如下:server-args = -s /var/lib/tftpboot –c启动TFTP服务器:#service xinetd restart测试是否启动TFTP服务器:# netstat –a | grep tftp如果没有打开:#chkconfig tftp on# /etc/init.d /xinetd restart关闭防火墙:Setup 进入设置(这里不在多说)注意:接下来虚拟机下必须设置网络模式为桥接模式(烧写uImage时候的网络模式),我曾经试过在NET模式下和HOST-ONLY模式都没有成功。

uboot中bootfmh调用流程

uboot中bootfmh调用流程

bootm命令在U-Boot 中是用来启动Linux 内核或者Flat Device Tree (FDT) 格式的设备树以及可能包含的根文件系统镜像的命令。

bootm命令执行的流程通常涉及以下步骤:1.加载内核与设备树:在bootm执行前,通常需要使用fatload、ext2load或其他加载命令将Linux 内核映像(例如zImage 或uImage)、设备树blob(dtb 文件)加载到内存中预定义的位置。

2.验证与解析镜像头:bootm命令首先会检查指定内存区域的内容是否符合Multi-Component Boot (MCB) 格式,该格式允许在一个单一的二进制块中包含多个可启动组件的信息。

如果找到合法的MCB 头,它会进一步解析内核镜像和其他组件的相关信息。

3.设置环境变量:U-Boot 会根据加载的内核类型设置必要的环境变量,如bootargs(传递给内核的启动参数),fdtcontroladdr(设备树的加载地址)等。

4.初始化板级硬件:在启动内核前,确保所有必要的外设和SOC 功能已经被正确初始化,以便内核能够顺利接管控制权。

5.调用启动例程:最后,bootm命令会调用相关的启动例程来启动内核。

这个过程通常涉及到跳转到特定的启动函数,该函数会配置CPU 进入特定模式以运行ARM Linux 内核,然后调用内核的入口点开始执行内核代码。

具体来说,bootm命令在U-Boot 源代码中对应的实现部分主要包括:•cmd_bootm.c文件中包含了do_bootm()函数,它是bootm命令的主要执行体。

•在do_bootm()函数内部,会按照不同类型的镜像(单内核、多组件)分别处理。

•如果内核支持flattened device tree,会加载并验证设备树数据,并将其地址写入适当的寄存器或内存位置供内核启动时获取。

•设置栈指针、CPU模式、以及重定位向量表等,为内核启动做准备。

•最终,bootm调用类似boot_jump_linux()函数来跳转到内核的入口点开始执行。

uboot 命令详解

uboot 命令详解

u-boot 技术文档1.U boot 命令详解1.1查看帮助命令使用help 或者?1.2环境变量打印环境变量:printenv设置环境变量:setenv(不会保存)保存环境变量:saveenv这个时候就有了1.3nandflash命令使用nand查看nandflash 所有指令擦除nand erase1.4norflash命令查看Flash信息命令: flinfo加/解写保护命令: protect擦除命令: erase1.5内存命令nm1.5USB指令使用help usb 查看usb具体指令使用usb 启动使用usb tree查看信息f atls usb 0 罗列u盘信息1.5.1实例演练usb指令烧写1.6实例演练ftp指令烧写环境变量中体现了开发板上的IP地址为192.168.0.2,网关为192.168.0.1,要求电上的tftp 服务器的IP为192.168.0.1;运行电脑上tftp服务器,指定好根目录,将内核和根文件系统放在根目录下。

注:线接上后,电脑上的本地连接可能是显示网络电缆没插好,这很正常!在使用过程中它们会自动去连接!<2>分别下载内核和根文件系统到内存0x30008000开始的空间先检查坏块nand bad再擦除坏块清理某个区域0x560000 0x3b22c00将根文件系统加载到0x30008000然后再将根文件系统写到0x560000 0x3b22c00这个位置然后重启:重复上面的步骤:nand erase 0x60000 0x267000将内核文件保存到0x60000 0x267000这块区域运行1.8系统重启指令2.U boot 内核移植在cpu/arm920t/start.S中添加以下代码在修改并添加为以下代码在include/configs/mini2440.h修改为如下:将以下代码修改为:将以下代码修改为:将以下代码修改为:在drivers/mtd/nand/s3c2410_nand.h 在最后下面代码上添加如下带码:。

使用ubifs格式的根文件系统

使用ubifs格式的根文件系统

使⽤ubifs格式的根⽂件系统配置内核,使其⽀持ubifs⽂件系统 1)Device Drivers --->Memory Technology Device (MTD) support --->UBI - Unsorted block images --->Enable UBI 2)File systems --->Miscellaneous filesystems --->UBIFS file system support制作ubifs格式的根⽂件系统镜像先说明⼀下,板⼦上既有NorFlash,⼜有NandFlash,其中根⽂件系统和应⽤程序放在NandFlash上,uboot和kernel放在NorFlash上,⽽根⽂件系统所在的mtd设备为mtd2,分区⼤⼩为34MiBuboot kernel rootfs=34MiB app./mkfs.ubifs -v -r ./rootfs -o rootfs.img -m 2048 -e 129024 -c 272 -r:制定⽂件内容的位置 -m:页⾯⼤⼩ -e:逻辑擦除块⼤⼩ -c:最⼤的逻辑擦除块数量mkfs.ubifs -m 2048 -e 129024 -c 1984 -o rootfs.ubifs -x none-m 2048 (Minimum input/output unit size: 2048 bytes)-e 129024 (Default UBI LEB size: 129024 bytes, 126.0 KiB)-c 1984 (Amount of eraseblocks: 1984 (260046848 bytes, 248.0 MiB))-o rootfs.ubifs (output file)-x none (no compression)./ubinize -v -o rootfs.ubi -m 2048 -p 128KiB -s 2048 hi.cfg-p:物理擦除块⼤⼩-m:页⾯⼤⼩-s: 最⼩的硬件输⼊输出页⾯⼤⼩,如:k9f1208为256(上下半页访问)配置⽂件hi.cfg如下:[ubifs] mode=ubi image=rootfs.img vol_id=0 vol_size=34MiB vol_type=dynamic vol_alignment=1 vol_name=rootfs vol_flag=autoresize然后修改uboot的环境变量:setenv bootargs 'mem=288M console=ttyAMA0,115200 root=ubi0:rootfs rw rootflags=sync rootfstype=ubifs ubi.mtd=2mtdparts=hi_sfc:5M(boot),1M(picture);hinand:34M(rootfs),8M(config),86M(app)';保存环境变量,执⾏如下命令setenv ipaddr 192.168.253.132;setenv serverip 192.168.253.130;setenv ethaddr 40:61:86:67:33:47;mw.b 82000000 ff 2200000;tftp 82000000 rootfs.ubi;nand erase 0 2200000;nand write 82000000 0 $(filesize);sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000说明:其实从上⾯的烧写命令可以看出,ubifs格式的镜像中是不包含oob信息的。

Linux中使用mount和umount命令挂载和卸载文件系统

Linux中使用mount和umount命令挂载和卸载文件系统

Linux中使用mount和umount命令挂载和卸载文件系统在Linux系统中,mount和umount命令是用于挂载和卸载文件系统的常用命令。

挂载即将一个文件系统连接到Linux文件目录结构的过程,而卸载则是断开这个连接的过程。

本文将介绍如何使用mount和umount命令进行文件系统的挂载和卸载,并提供一些相关的使用技巧和注意事项。

一、mount命令的使用mount命令用于将一个文件系统挂载到指定的目录。

它的基本格式为:mount [选项] 文件系统挂载点其中,文件系统可以是设备节点、设备文件或网络资源,挂载点是文件系统要挂载到的目录。

1. 挂载设备节点挂载设备节点是最常见的用法,设备节点可以是硬盘、U盘、CD-ROM等。

以下是一个例子:mount /dev/sdb1 /mnt上述命令将/dev/sdb1设备节点挂载到/mnt目录。

2. 挂载设备文件有时候,设备节点并不直接可用,需要通过设备文件来指定。

以下是一个例子:mount /dev/cdrom /mnt上述命令将/dev/cdrom设备文件挂载到/mnt目录。

3. 挂载网络资源在Linux中,我们也可以通过mount命令挂载网络资源,比如使用NFS挂载远程文件夹。

以下是一个例子:mount -t nfs 192.168.0.100:/data /mnt上述命令将远程主机192.168.0.100上的/data文件夹挂载到/mnt目录。

注意:在使用mount命令时,需要使用root权限或具有sudo权限的用户。

二、umount命令的使用umount命令用于卸载已挂载的文件系统。

它的基本格式为:umount [选项] 挂载点其中,挂载点指的是已经挂载的目录。

以下是一个例子:umount /mnt上述命令将/mnt目录下的文件系统进行卸载操作。

注意:在卸载文件系统之前,请确保没有进程正在使用该文件系统。

否则,umount命令将无法成功卸载文件系统。

使用uboot去挂载根文件系统

使用uboot去挂载根文件系统

1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux- 添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。

Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。

安卓系统快速开机的方法及设备的制作技术

安卓系统快速开机的方法及设备的制作技术

安卓系统快速开机的⽅法及设备的制作技术⼀种安卓系统快速开机的⽅法及装置,适⽤于⼿机、平板电脑、导航仪等等任意带有安卓系统的电⼦产品,该⽅法包括步骤S101:在启动core服务的同时启动Zygote步骤。

区别于现有技术,上述技术⽅案通过将Zygote步骤提前到启动core服务的同时启动。

以及⼀系列的优化步骤,达到了提⾼安卓系统开机速度的效果。

技术要求1.⼀种安卓系统快速开机的⽅法,其特征在于,在启动core服务的同时启动Zygote步骤。

2.根据权利要求1所述的安卓系统快速开机的⽅法,其特征在于,还包括步骤,将启动系统服务与预加载资源操作做并⾏处理。

3.根据权利要求1所述的安卓系统快速开机的⽅法,其特征在于,还包括步骤,优化系统服务,将预设的⾮核⼼服务类别延迟启动。

4.根据权利要求1所述的安卓系统快速开机的⽅法,其特征在于,还包括步骤,优化登录器,将动态布局计算、动态图标显⽰和加载图标微件从主线程中移出。

5.根据权利要求1所述的安卓系统快速开机的⽅法,其特征在于,还包括步骤,优化INIT启动脚本,删除冗余代码。

6.根据权利要求1所述的安卓系统快速开机的⽅法,其特征在于,还包括步骤,在LINUX阶段对外围设备驱动进⾏优化,将I2C通讯、固件下载及矫正步骤延后处理。

7.根据权利要求6所述的安卓系统快速开机的⽅法,其特征在于,还包括步骤,对外围设备驱动中的打印信息进⾏分级,将未达到重要级别的需要串⼝输出的打印信息删除。

8.根据权利要求1所述的安卓系统快速开机的⽅法,其特征在于,还包括步骤,对UBOOT⽂件进⾏裁剪,只保留开机必要的初始化操作。

括步骤,根据机器的硬件配置确定开机时使⽤的频率。

10.⼀种安卓系统快速开机的装置,其特征在于,包括提前启动模块,所述提前启动模块⽤于在启动core服务的同时启动Zygote步骤。

11.根据权利要求10所述的安卓系统快速开机的装置,其特征在于,还包括并⾏处理模块,所述并⾏处理模块⽤于将启动系统服务与预加载资源操作做并⾏处理。

uboot-配置文件

uboot-配置文件

uboot-配置⽂件uboot配置⽂件⼀般在configs下⾯,但是这⾥的配置⽂件⾥⾯的内容很少,⼀般相关的c和h配置⽂件在:board/freescare(⼚家)/imx6ullevk(扳⼦)/imx6ullevk.c(板⼦c⽂件)头⽂件在:include/configs/mx6ullevk.h(板⼦头⽂件)其中头⽂件引⼊了⼀个很重要的⽂件(mon.h),这⾥⾯存放了这⼀系列的板⼦的所有通⽤配置⽂件,可以修改改⽂件进⾏配置。

DDR在uboot中的board/freescare(⼚家)/imx6ullevk(扳⼦)/imx6ullevk.c(板⼦c⽂件)的统计⽬录下存在⼀个imximage.cfg⽂件,该⽂件⽤于校准DDR,在这⾥进⾏ddr的校准测试。

环境变量如果我们没有配置环境变量,那么在系统启动的时候,他会条⽤⾃⼰的环境变量,这个环境变量的配置⽂件在:include/env_default.h中定义。

⽐如说⾥⾯的:#ifdef CONFIG_BOOTCOMMAND “bootcmd=” CONFIG_BOOTCOMMAND “\0”这⾥的CONFIG_BOOTCOMMAND在之前配置的.h⽂件中有定义(include/configs/mx6ullevk.h(板⼦头⽂件))。

bootcmdbootcmd主要是⽤来启动内核的,⾥⾯存放了⼀些列命令,⽤于uboot启动内核。

可以直接在include/configs/mx6ullevk.h(板⼦头⽂件)的头⽂件中通过修改CONFIG_BOOTCOMMAND直接将bootcmd进⾏写死bootargsbootargs会将其值传递给内核。

在头⽂件中CONFIG_EXTRA_ENV_SETTINGS下⾯运⾏了⼀个"run mmcargs的脚本,在该脚本中定义了bootargs: "mmcargs=setenv console,bootargs console={baudrate} "将其展开:bootargs console = ttymxc0,115200,root=/dev/mmcblk1p2root设置的是根⽂件系统。

ubifs文件系统的制作详解

ubifs文件系统的制作详解

分类:2012-04-18 21:34 314人阅读(0) 为了更好的理解ubifs根文件系统的制作,首先,我们简单的说一下,系统的组成:bootloader(uboot)的作用就是用来加载操作系统;而嵌入式linux系统由linux 内核和根文件系统两部分构成,两者缺一不可。

所以我们要制作一个UBIFS的根文件系统,首先必须让上面系统组成的几个部分都支持UBIFS文件系统,就得在这几个组成部分添加一些“东西”(支持UBI的配置):(打个我自己理解的比喻吧:“娶媳妇”比作--启动系统,娶媳妇是不是要经过老爸、老妈、丈母娘、岳父的同意和支持?bootloader、parames、kernel、root Filesystem便是老爸、老妈、丈母娘、岳父...O(∩_∩)O~,而你叫"UBI")这篇博文主要是详细解析:uboot中添加对UBIFS文件系统的支持一、移植环境§主机:vmware-redhat5§开发板:mini2440--256MB nandflash§kernel: 编译器:§uboot:二.移植步骤本次移植的功能为:支持UBIFS文件系统1.在include/configs/中添加如下配置:(注意:不同的开发板在include/configs/目录下对应的修改的配置文件不同,我的开发板是mini2440所以修改的是)#define CONFIG_MTD_DEVICE#define CONFIG_MTD_PARTITIONS#define CONFIG_CMD_MTDPARTS#define CONFIG_LZO#define CONFIG_RBTREE#define CONFIG_CMD_UBIFS 到uboot的顶层目录下(可能拿到的uboot已被编译过,所以最好要用此命令清理中间文件)执行命令:make clean(uboot是通用的bootloader,支持多种开发板,所以编译之前先选择使用哪种board)执行命令:make mini2440_config注意:我用的是mini2440开发板,所以要编译这个开发板使用的uboot,所以这里的目标为mini2440_config,表示选择的board是mini2440(mini2440_config在Makefile标准术语称为“目标”,可以在uboot顶层Makefile找到该目标)执行命令(开始编译uboot):make CROSS_COMPILE=arm-linux-分类:2012-04-19 13:55 156人阅读(0) 一、移植环境§主机:vmware-redhat5§开发板:mini2440--256MB nandflash§kernel: 编译器:§uboot:二.移植步骤1.在内核顶层目录下使用命令:make menuconfig ,进入内核配置菜单,添加对UBIFS文件系统的支持。

使用uboot去挂载根文件系统

使用uboot去挂载根文件系统

1、根文件系统的制作1)创建根文件系统主目录:mkdir rootfs2)创建根文件系统的子目录cd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录mkdir usr/bin usr/lib usr/sbin lib/modules4)创建设备文件内核在引导时设备节点console,null必须存在cd dev/注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1mknod -m 666 null c 1 3c:表明类型为字符设备第一个数字(5,1):主设备号第二个数字(1,3):次设备号这两个设备文件设备号是固定的5)安装etcetc目录主要是一些启动时的脚本文件一般不需要修改tar etc.tar.gz –C /xxx/rootfs这个命令可能不给用改为:tar xvzf etc.tar.gz –C /xxx/rootfs6)编译内核模块内核模块保存在lib下面的module下配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住进入Linux内核目录(linux-2.6.32.2)make modules ARCH=arm CROSS_COMPILE=arm-linux-添加了ARCH=arm表示现在编译的是arm架构的内核CROSS_COMPILE=arm-linux-表示使用交叉编译工具链安装内核模块到根文件系统:make modules_install ARCH=armINSTALL_MOD_PATH=/xxx/rootfs7)配置busybox因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。

Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。

uboot、内核、操作系统、根文件系统之间的关系

uboot、内核、操作系统、根文件系统之间的关系

uboot是个引导启动程序。

BIOS自检完成后就把电脑控制权交给uboot,由uboot来加载并引导操作系统运行。

内核就是最最最核心的那部份。

操作系统内核就是操作系统的最最最最核心的那些程序。

新安装的操作系统中,一些自带的小工具啊,小游戏啊,甚至连键盘鼠标控制功能,这些都不属于内核。

内核是不包括硬件驱动程序的。

操作系统就是控制计算机硬件的软件系统。

它与内核的区别是它包含硬件驱动和一些基本的实用功能。

根文件系统这个名词很少出现在windows中。

在计算机存储中,目录结构都是以树形结构表示的,根就是指这棵树的根部。

其他所有目录都是在这个“根”上面逐级分配而来。

“根文件系统”因为你加了“系统”二字,所以可以解释为是指“整棵树”,整个“树形结构的文件系统”它们之间的关系是:BIOS自检---uboot引导----加载内核----操作系统启动---启动完成,系统待机。

这几个步骤所需要用到的文件与程序什么的全部存贮在文件系统中。

在这几个名词来说,文件系统可以独立存在,但其他几样则无法脱离文件系统而存在。

使用Buildroot制作根文件系统

使用Buildroot制作根文件系统

使用Buildroot制作根文件系统Buildroot是一个用于构建嵌入式Linux根文件系统的工具,它提供了简单易用的配置方式和快速构建系统,可以帮助用户快速构建出自己的根文件系统。

Buildroot支持许多不同的架构和硬件平台,并集成了许多开源软件包,可以根据用户的需求来进行定制。

在本文中,我们将介绍使用Buildroot制作根文件系统的步骤和注意事项。

一、安装Buildroot在开始使用Buildroot制作根文件系统之前,需要先安装Buildroot。

可以在官方网站上下载最新版本的Buildroot,然后解压缩到本地目录。

在解压缩之后,进入到Buildroot的目录,可以看到有一个名为Makefile的文件,这是Buildroot的主要配置文件。

二、配置BuildrootConfigure Buildroot的过程就是创建一个默认的配置文件,通过这个默认配置文件生成根文件系统。

执行以下命令:```make menuconfig```这个命令将打开一个配置菜单,其中包括了一些基本的选项和一些高级选项。

基本选项包括选择所需的架构、选择和配置内核和交叉编译工具链等。

此外,还可以选择要安装的软件包、文件系统类型、文件系统大小等选项。

三、编译Buildroot完成配置后,就可以开始编译Buildroot。

执行以下命令:```make```这个命令将依照之前的配置文件,将所需的软件包下载、交叉编译、配置、安装,然后将所有安装的文件打包成 rootfs.tar 文件。

四、安装根文件系统在编译成功之后,就可以将根文件系统安装到目标平台上。

在目标平台上,先将 rootfs.tar 文件解压缩,然后将解压缩后的文件拷贝到目标文件系统的根目录下。

这里需要注意的是,需要将交叉编译的库和工具链一并拷贝到目标平台上。

五、启动目标平台在将根文件系统安装到目标平台之后,就可以启动目标平台并开始使用它了。

如果一切都配置正确的话,应该可以看到一个基本的 Linux 终端界面。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、根文件系统的制作
1)创建根文件系统主目录:
mkdir rootfs
2)创建根文件系统的子目录
cd rootfs
mkdir bin dev etc lib proc sbin sys usr mnt tmp var 3)然后创建usr下的子目录
mkdir usr/bin usr/lib usr/sbin lib/modules
4)创建设备文件
内核在引导时设备节点console,null必须存在
cd dev/
注:该目录为/mini2440/nfsroot/rootfs 下的dev目录mknod –m 666 console c 5 1
mknod -m 666 null c 1 3
c:表明类型为字符设备
第一个数字(5,1):主设备号
第二个数字(1,3):次设备号
这两个设备文件设备号是固定的
5)安装etc
etc目录主要是一些启动时的脚本文件一般不需要修改
tar etc.tar.gz –C /xxx/rootfs
这个命令可能不给用改为:
tar xvzf etc.tar.gz –C /xxx/rootfs
6)编译内核模块
内核模块保存在lib下面的module下
配置内核:*直接编译到zimage m不链接到zimage而是编译成模块到.o就停住
进入Linux内核目录(linux-2.6.32.2)
make modules ARCH=arm CROSS_COMPILE=arm-linux- 添加了ARCH=arm表示现在编译的是arm架构的内核
CROSS_COMPILE=arm-linux-表示使用交叉编译工具链
安装内核模块到根文件系统:
make modules_install ARCH=arm
INSTALL_MOD_PATH=/xxx/rootfs
7)配置busybox
因为Linux很多命令都是通过软连接实现的,所以无法直接将这些命令复制到根文件系统中。

Busybox是一个工具集合,根文件系统很多命令都可以通过busybox编译得到,如命令ls,cd,mkdir。

Busybox相当于一个命令解析器,根文件中命令被软连接到
busybox,由busybox进行命令解析。

a) 解压busybox
tar xvzf busybox-1.13.3
b) 配置busybox
make menuconfig
进入busybox settings-->
进入Build options
选中Build busybox as a static binary, 静态链接
还有就是要把交叉编译工具链使用arm-linux-
进入busybox settings--> Installation option-->
选中“Don’t use /usr”选中该项可以避免busybox被安装到宿主系统的/usr目录下,破坏宿主系统
将busybox被安装到/mini2440/nfsroot/rootfs
退出busybox,保存;
c)编译busybox
make ARCH=arm CROSS_COMPILE=arm-linux-
d) 安装busybox
make install
至此根文件系统制作完成。

2、nfs 共享根文件系统
1)配置nfs
在/etc/exports配置文件,添加代码如下:
其中/mini2440/nfsroot/rootfs 是文件系统所在目录
192.168.1.* 设置文件共享的网段
rw 读写权限
sync 同步回写
no_root_squash 设置是否具有root权限no表示没有root权限
2) 重启nfs服务
8、使用uboot去挂载根文件系统
准备工作:
启动超级终端:
输入printenv检查PC IP地址是否正确:
若不正确,用命令setenv serverip 192.168.1.11设置PC机IP:
设置完后要对配置进行保存:saveenv:
用命令ping 192.168.1.11 查看与PC机是否成功连接:
出现alive表示与PC机成功连接,如出现not alive:
1)检查PC机IP是否设置正确
2)检查网线是否联通
3)检查无线网是否关掉
都没有问题后进行以下内容:
1)将制作好的uImage 烧写到nand flash 对应的内核分区:(1):运行命令“tftp 0x30000000 192.168.1.11:uImage”,将内核镜像uImage 下载到内存0x30000000地址处:
如不能下载:
1)检查IP是否与PC机IP一致
2)检查PC机/tftpboot下是否有uImage
(2):运行命令“nand erase 0x00060000 0x00500000”檫除nand flash 中位于0x60000地址处的整个kernel 分区:
(3):运行命令“nand write 0x30000000 0x00060000 400000”将位于0x30000000出的内核镜像烧写到nand flash的整个内核分区:
(4):改变bootcmd 的值,让uboot 在加载模式下能自动启动内核:
setenv bootcmd ‘nboot 0x30007fc0 0 0x00060000;bootm’
保存配置:
saveenv
4.设置启动参数让uboot 能挂在根文件系统:
set bootargs root=/dev/nfs console=ttySAC0 nfsroo t=192.168.1.11:/mini2440/nfsroot/rootfs ip=192.168.
1.70:19
2.168.1.11:192.168.1.1:255.255.255.0::eth0:off 如不能挂载:
1)检查nfsroot=192.168.1.11:/mini2440/nfsroot/rootfs中I P是否与PC机IP一致
2)检查nfsroot=192.168.1.11:/mini2440/nfsroot/rootfs冒号后面的目录是否是PC机上的根文件目录
3)如以上都没有问题,检查PC上/etc/exports中设置的目录是否是根文件目录
5.重新启动挂载成功:
8、进行交叉编译
需要两个库文件支持在根目录下:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib libc.so.6 ld-linux.so.3
2 用arm-linux-gcc编译:
PC机上:
超级终端上:。

相关文档
最新文档