一、sd启动
将u-boot镜像写入SD卡,将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.(内存卡的节点)。
当有多个交叉编译器是,不方便设置环境变量时,可以在编译命令中指定交叉编译器,具体如下:在源码中操作以下步骤:
make distclean
make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- mrproper
make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_config
make 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.0
setenv 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开始的区域。
三、烧写内核:
重新设置环境变量:
setenv gatewayip 192.168.1.1 (电脑网关)
setenv ipaddr 192.168.1.102 (开发板ip,不要与虚拟机和电脑ip冲突)
setenv netmask 255.255.255.0
setenv serverip 192.168.1.10 (虚拟机ip)
saveenv
在/svn/linux-3.0.8 源码目录下make uImage,将uImage拷贝到tftp目录下
[FriendlyLEG-TINY210]#tftp 21000000 uImage //下载文件到内存
[FriendlyLEG-TINY210]#nand erase 600000 f200000 //擦写相应的nand
[FriendlyLEG-TINY210]#nand write 21000000 600000 b03c280(写入长度) //写到nand
TFTP服务器配置:
sudo apt-get install xinetd
sudo apt-get install tftp-hpa tftpd-hpa
配置:
1: 在/etc/xinetd.d/目录下创建tftp配置文件
2: touch /etc/xinetd.d/tftp
3:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
4: 创建tftp下载目录:
mkdir -p /var/tftpboot/
sudo chmod 777 /var/tftpboot
echo “iloveyou” >> /var/tftpboot/demo
测试:
tftp localhost
tftp 127.0.0.1
> get demo
> quit
四、启动参数
设置bootargs参数
1:如果用yaffs2文件系统
setenv bootargs noinitrd root=/dev/mtdblock4 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M
设置自启动参数bootcmd
setenv bootcmd nand read 21000000 80000 (nand起始地址)22e800 (nand写入长度)\; bootm 21000000
烧写命令如下:
[FriendlyLEG-TINY210]#tftp 21000000 rootfs_android.img //下载文件到内存
[FriendlyLEG-TINY210]#nand erase e00000 f200000 //擦写相应的nand
[FriendlyLEG-TINY210]#nand write.yaffs 21000000 e00000 b03c280 //写到nand
记住yaffs镜像是包含OOB数据的,所以写入NAND Flash的数据长度应该是2112(=2048 + 64)字节的整数倍。
2:如果用NFS烧写文件系统
setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.10(虚拟机ip):/home/xyp/nfsroot/rootfs ip=192.168.1.102(开发板ip):192.168.1.10(虚拟机ip):192.168.1.1:255.255.255.0::eth0:off console=ttySAC0,115200 init=/linuxrc
Setenv bootcmd nand read 21000000 600000 20b334 \; bootm 21000000
Saveenv
2.1 nfs配置
Sudo apt-get install nfs-kernel-server 配置nfs
Sudo vi /etc/exports添加/home/ly/nfs *(rw,sync,no_root_squash)
重启nfs服务,使配置生效:sudo /etc/init.d/nfs-kernel-server restart
2、构建根文件按系统
2.1、建立根文件系统目录
在/home/ly下创建目录system,新建建立根文件系统目录的脚本文件 create_rootfs_bash,使用命令sudo chmod +x create_rootfs_bash改变文件的可执行权限,./create_rootfs_bash运行脚本,就完成了根文件系统目录的创建。
文件系统目录脚本文件:
#!/bin/sh
echo "------Create rootfs directons start...--------"
mkdir rootfs
cd rootfs
echo "--------Create root,dev....----------"
mkdir root dev etc boot tmp var sys proc lib mnt home usr
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
echo "make node in dev/console dev/null"
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null c 1 3
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/run var/tmp
chmod 1777 tmp
chmod 1777 var/tmp
echo "-------make direction done---------"
2.2建立动态链接库
动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝lib的内容到新 建的根文件目录lib内。
cd /opt/studyarm (压缩包存放位置)
tar –zxvf root_qtopia.tgz –C /opt/studyarm (输出目录)
cp –rf /opt/studyarm/root_qtopia/lib/* /home/ly/system/rootfs/lib/
2.3交叉编译Bosybox
Bosybox是一个遵循GPLv2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox可以自动生成根文件系统所需的bin、sbin、usr目录和linuxrc文件。
1、解压busybox
cd /mnt/hgfs/share (压缩包存放位置)
tar –zxvf busybox-1.13.3.tar.tgz –C /opt/studyarm (输出目录)
2、进入源码,修改Makefile文件:
cd /opt/studyarm/busybox-1.13.3
修改:
CROSS_COMPILE ?=arm-linux- //第164行
ARCH ?=arm //第189行
3、配置busybox
输入make menuconfig进行配置
(1)、Busybox Settings--->
General Configuration--->
[*] Show verbose applet usage messages
[*] Store applet usage messages in compressed form
[*] Support –install [-s] to install applet links at runtime
[*] Enable locale support(system needs locale for this to work)
[*] Support for –long-options
[*] Use the devpts filesystem for unix98 PTYs
[*] Support writing pidfiles
[*] Runtime SUID/SGID configuration via /etc/busybox.config
[*] Suppress warning message if /etc/busybox.conf is not readable
Build Options--->
[*] Build BusyBox as a static binary(no shared libs)
[*] Build with Large File Support(for accessing files>2GB)
Installation Options->
[]Don’t use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
Busybox Library Tuning --->
(6)Minimum password legth
(2)MD5:Trade Bytes for Speed
[*]Fsater /proc scanning code(+100bytes)
[*]Command line editing
(1024)Maximum length of input
[*] vi-style line editing commands
(15) History size
[*] History saving
[*] Tab completion
[*]Fancy shell prompts
(4) Copy buffer size ,in kilobytes
[*]Use ioctl names rather than hex values in error messages
[*]Support infiniband HW
(2)、Linux Module Utilities--->
(/lib/modules)Default directory containing modules
(modules.dep)Default name of modules.dep
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
-----options common to multiple modutils
[ ] support version 2.2/2.4 Linux kernels
[*]Support tainted module checking with new kernels
[*]Support for module .aliases file
[*] support for modules.symbols file
如果出现错误,直接找到相应的函数,取消该选项,在make menuconfig下用/查找,空格键添加/取消选项内容。
4、在busybox中配置对dev下设备类型的支持
mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式linux的根文件系统时,使用它是最优的选择。下面的选项将增加对mdev的支持。
Linux System Utilities --->
[*]Support /etc/mdev.conf
[*]Support command execution at device addition/removal
5、编译busybox
编译busybox到指定目录:
cd /opt/studyarm/busybox-1.13.3
make CONFIG_PREFIX=/home/ly/system/rootfs install
在rootfs目录下会生成目录bin、sbin、usr和文件linuxrc的内容。
6、建立etc目录下的配置文件
1、etc/mdev.conf文件,内容为空。
2、拷贝主机etc目录下的passwd、group、shadow文件到rootfs/etc 目录下。
3、etc/sysconfig目录下新建文件HOSTNAME,内容为”LYliyan”。
4、etc/inittab文件:
#etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
7、etc/init.d/rcS文件:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
echo "----------munt all----------------"
mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
echo "*************************************"
echo "****************Studying ARM*********************"
echo "Kernel version:linux-2.6.29.1"
echo "Student:Feng dong rui"
echo "Date:2009.07.15"
echo "******************************************"
/bin/hostname -F /etc/sysconfig/HOSTNAME
使用以下命令改变rcS的执行权限:
sudo chmod +x rcS
8、etc/fstab文件:
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
mdev /dev ramfs defaults 0 0
9、 etc/profile文件:
#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='[\u@\h=W]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
10、制作根文件系统映像文件
使用以下命令安装好yaffs文件系统制作工具:
cd /mnt/hgfs/share
tar –zxvf mkyaffs2image.tgz –C /
在/opt/studyarm目录下,使用命令mkyaffs2image rootfs rootfs.img 生成根文件系统映像文件。
注意:
制作镜像提供的有两个工具,我的开发板是1G Flash的所以应该选用mkyaffs2image-128M的,选用mkyaffs2image会出现烧写文件系统不成功的错误。提供的文档中rootfs_rtm_210这个文件系统也是可用的
烧写ARM开发板系统教程----->uboot 、内核以及文件系统的更多相关文章
-
ARM开发板系统移植-----u-boot的编译
本文和另外两篇姊妹篇都是为了说明如何裁剪出适合在mini2440 开发板上运行的Linux系统,以记录自己的学习成果.其中本文先介绍了嵌入式系统的软件组成部分,然后介绍编译出适合在mini2440开发 ...
-
ARM开发板系统移植-----kernel的编译
前面一篇文章http://www.cnblogs.com/linzizhang/p/4817336.html介绍了开发板上系统软件的第一部分--bootloader的编译方法. 背景:把bootloa ...
-
ARM开发板系统移植-----rootfs的制作
前面两篇文章分别介绍了mini2440开发板上运行的bootloader和kernel,到这里系统启动后其实是停留在一个“僵死”的状态---无法挂载根文件系统. 这里将介绍如何制作一个根文件系统,并且 ...
-
列出当前ARM开发板系统加载的模块
lsmod 列出当前系统中加载的模块,其中左边第一列是模块名,第二列是该模块大小,第三列则是使用该模块的对象数目
-
迅为4412开发板Linux设备树的镜像烧写和源码简单优化教程
1 烧写: 烧写和4412默认镜像的烧写类似,使用fastboot. 先更新uboot,用4412默认uboot更新支持设备树的uboot 用支持设备树的uboot烧写. 进入支持设备树的uboo ...
-
【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...
-
使用arm开发板搭建无线mesh网络(二)
上篇博文介绍了无线mesh网络和adhoc网络的区别,这篇文章将介绍无线mesh网络的骨干网节点的组建过程.首先需要介绍下骨干网节点的设计方案:每个骨干网节点都是由一块友善之臂的tiny6410 ar ...
-
【原创】车载实时路况信息接收终端移植于Smart210开发板 --- 综合教程
[原创]车载实时路况信息接收终端移植于Smart210开发板 --- 综合教程 所用工具: windows电脑 Ubuntu12.04 Smart210开发板 4g以上SD卡 U盘 步骤: 1. ...
-
开发快平台(M302I小e开发板系列教程)
开发快平台(M302I小e开发板系列教程) 开发块平台ESP8266模块相关理解 一. M302I小e开发板源码注释,源码基于:v1.4.0.8-u34.zip 1. user_main.c /*** ...
随机推荐
-
SSH框架的简单上传功能的实现
1.创建项目. 2.导入开发包. 3.配置web.xml. 配置内容就是配置struct2的内容如下: <?xml version="1.0" encoding=" ...
-
centos 7安装部署docker
1.centos 7 在windows下通过vm虚拟机安装centos 7: VMware-workstation-full-10.0.3-1895310 centos 7 2.要求 操作系统的内核版 ...
-
.sh脚本判断判断某一变量是否为某一数值
.sh脚本中,判断某一变量(例如:OEM_CUSTOMER_SUPPORT)是否为某一数值(例如:0),并根据条件做不同处理,写法如下: if [ $OEM_CUSTOMER_SUPPORT -eq ...
-
【转】MSMQ 微软消息队列 简单 示例
MSMQ它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中:本地或者是异地的消息接收程 ...
-
[C语言]一个很实用的服务端和客户端进行TCP通信的实例
本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...
-
Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
-
jQuery图片轮播的具体实现
先看一看html代码,以及对应的css代码: <div id="scrollPics"> <ul class="slider" > ...
-
Nginx日志中的金矿 -- 好文收藏
转:http://www.infoq.com/cn/articles/nignx-log-goldmine Nginx(读作Engine-X)是现在最流行的负载均衡和反向代理服务器之一.如果你是一名中 ...
-
cp命令 复制目录
格式:cp -R {源目录地址} {目标目录地址} 假设文件夹download下有两个目录 download/a download/b 现在想将文件夹a复制到文件夹b下,执行 cp -R downlo ...
-
上传文件异常问题 | 413 Request Entity Too Large
开发中遇到这样的问题:一个上传文件的功能,内网测试都正常了,但是发布到外网就无法上传大点的(大于1MB)文件,更奇怪的是,后台还没有任何的异常信息. 于是就用Http抓包工具(HttpDetect)看 ...