Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7691983
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2010-08-12 13:55:41

嵌入式学习入门 http://blog.chinaunix.net/u3/117680/showart.php?id=2300212  

      文章——>嵌入式学习入门    全面的讲述学习嵌入式linux中的每个步骤 

 

内核版本:

Linux-2.6.31

交叉编译器版本:

arm-linux-gcc 4.3.2

操作系统平台:

Linux -- Red Hat 9.0

开发板平台:

Arm -- TX2440A

使用的工具:

Busybox-1.15.2.tar.bz2

 

编译busybox

获取busybox1.15.2源码,在找到busybox-1.15.2.tar.bz2这个压缩包,下载,解压:

#tar xjvf busybox-1.15.2

 

进入源码目录,修改Makefile

164行,CROSS_COMPILE = arm-linux-

190行,ARCH = arm

执行#make menuconfig进行配置busybox

 

配置选项大部分都是保持默认的,只需要注意选择以下这几个选项,其他的选项都不用动:

Busybox Setting --->

Build Options --->

[*]Build Busybox as a static binary(no shared libs)

[*]Build with Large File Support (for accessing files > 2GB)

Installation Options --->

(./_install) Busybox installation prefix

进入这个选项,输入busybox的安装路径,如:../rootfs

Busybox Library Tuning --->

[*] vi-style line editing commands

[*] Fancy shell prompts

要选择这个选项:Fancy shell prompts,否则挂载文件系统后,无法正常显示命令提示符:[\u@\h \W]#

 

配置完后,执行#make make install

 

然后就会在上一级目录下生成rootfs文件夹,里面包含几个文件夹/bin /sbin /usr linuxrc

 

准备制作

创建根文件系统目录,主要包括以下目录:

/bin/etc/dev/home/lib/mnt/opt/proc/root/sbin/sys/tmp,/usr/var.

 

建一个名为root_2.6.31的文件夹

#mkdir root_2.6.31

rootfs目录下生成:binlinuxrcsbinusr复制过来,并且在该目录下创建文件系统所需要的其他目录

#mkdir root-2.6.30.4
#cp -rf busybox-1.13.0/_install/* root-2.6.30.4/
#cd root-2.6.30.4/
#mkdir dev etc home lib mnt opt proc tmp var www

向各目录中添加文件系统所需要的目录或文件,没有提到的就不用添加。这里要注意各种文件的权限,建议都改为777,命令:#chmod 777 文件名

 

制作文件系统

dev目录下,创建两个设备节点:

#mknod console c 5 1

#mknod null c 1 3

进入etc目录,添加文件:

拷贝Busybox-1.15.2/examples/bootfloopy/etc/* 到当前目录下。

# cp -r ../../busybox-1.15.2/examples/bootfloopy/etc/* ./

包括文件:fstab init.d inittab profile

 

拷贝/etc/passwd, /etc/group, /etc/shadow到当前目录下。

# cp /etc/passwd ./

# cp /etc/group ./

# cp /etc/shadow ./

 

passwd文件中的第一行:root:x:0:0:root:/root:/bin/bash中的

/bin/bash,改成/bin/ash

因为文件系统的bin目录下没有bash这个命令,而是用ash代替bash,所以在用用户名密码登录的时候(telnet),会出现“cannot run /bin/bash: No such file or directory”的错误。

 

修改inittab文件:

内容如下:

::sysint:/etc/init.d/rcS

 

console::askfirst:-/bin/sh

::once:/usr/sbin/telnetd -l /bin/login

::ctrlaltdel:/bin/umount -a –r

 

修改fstab文件,内容如下:

proc /proc proc defaults 0 0

tmpfs     /tmp tmpfs defaults 0 0

sysfs /sys sysfs defaults 0 0

tmpfs /dev tmpfs defaults 0 0

var /dev tmpfs defaults 0 0

修改init.d/rcS文件,内容如下:

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

runlevel=S

prevlevel=N

umask 022

export PATH runlevel prevlevel

mount -a

mkdir /dev/pts

mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

mkdir -p /var/lock

/bin/hostname -F /etc/sysconfig/HOSTNAME

 

修改profile文件,内容如下:

# Ash profile

# vim: syntax=sh

# No core files by default

#ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"

LOGNAME=$USER

PS1='[\u@\h \W]# '

PATH=$PATH

HOSTNAME=`/bin/hostname`

echo "Processing /etc/profile... "

echo "Done"

export USER LOGNAME PS1 PATH

 

新建sysconfig文件夹,在里面新建HOSTNAME文件,内容为:TX2440A

拷贝库文件:

进入lib目录,拷贝交叉编译器的库文件到lib目录下

#cp -f /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib/ -a

由于交叉编译器的库文件比较多,体积较大,所以需要裁剪一下库文件,只保留常用的库文件,具体的裁剪方法可以参考我们提供的文件系统的源码。

到这里,文件系统的框架已经做好,我们需要把文件系统制作成可以烧写进Nandflash中的yaffs2镜像文件。

使用mkyaffs2image工具,制作yaffs2镜像,这个工具是在yaffs2源码包中utils目录下的mkyaffs2image.c文件编译得到的,如果使用的是大页NAND,需要修改源码。

可以使用编译好的mkyaffs2image工具

文件: mkyaffs2image.tar.gz
大小: 9KB
下载: 下载

把解压出来的可执行文件复制到/usr/bin目录下,

#cp mkyaffs2image /usr/bin

制作文件系统镜像:

#mkyaffs2image root_2.6.31 root_2.6.31.bin

root_2.6.31.bin就是yaffs2文件系统镜像,要先修改它的权限,否则该文件无法被复制:

#chmod 777 root_2.6.31.bin

 

root_2.6.31.bin下载到nandflash中的文件系统分区中

参考

http://blog.chinaunix.net/u3/117680/showart_2294496.html

 

如果文件系统能正常挂载,终端会打印出:

Please press Enter to activate this console. (按回车)

Processing /etc/profile...

Done

[root@TX2440A /]#

 

凝问?

http://blog.chinaunix.net/u3/117680/showart.php?id=2297321

 

 
阅读(2092) | 评论(0) | 转发(2) |
0

上一篇:串口传输命令

下一篇:usb的使用

给主人留下些什么吧!~~