linux系统构建
********************************************************
---交叉编译环境构建---
安装arm-linux-gcc-4.3.2 (交叉编译器)
tar xzvf arm-linux-gcc-4.3.2.tgz -C /
cd
/usr/local/arm/4.3.2/bin
./arm-linux-gcc
-v
在/etc/bashrc文件的最后添加如下一行:
export
PATH=/usr/local/arm/4.3.2/bin:$PATH
source /etc/bashrc
echo
$PATH
arm-linux-gcc test.c -o test_arm
file test_arm
mini2440模拟器的安装:qemu
如果你的系统中没有zlib,先安装zlib-1.2.7.tar.gz
cp zlib-1.2.7.tar.gz /opt
tar xzvf
zlib-1.2.7.tar.gz
cd zlib-1.2.7
./configure
--prefix=/usr
make
make install
安装qemu:
cp mini2440-HEAD1.tar.gz /opt
tar xzvf
mini2440-HEAD1.tar.gz
cd mini2440
./configure
--target-list=arm-softmmu,arm-linux-user --disable-gfx-check
--disable-sdl
make
make install
qemu-arm -L
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/ ~/test_arm
tftp安装
rpm -ivh xinetd-2.3.14-18.fc9.i386.rpm
rpm -ivh
tftp-server-0.48-3.fc9.i386.rpm
rpm -ivh tftp-0.48-3.fc9.i386.rpm
rpm
-qa | grep tftp
tftp-0.48-3.fc9
tftp-server-0.48-3.fc9
修改配置文件:/etc/xinetd.d/tftp
server_args =
-s /mnt/hgfs/LinuxShared/mytftp -c
disable = no
/etc/init.d/xinetd start
连接:ftp 192.168.1.230
解压安装构建源代码和应用程序
mkdir -p /opt/FriendlyARM/mini2440
将所有资源拷贝到/mnt/hgfs/LinuxShared/mini2440soft目录。
进入linux的/opt/FriendlyARM/mini2440目录下:
解压启动引导程序源代码
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/vboot-src-20100106.tar.gz
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/bootloader.tgz
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/tekkamanninja-U-boot-2009.11_tekkaman- 16deca6.tar
解压linux内核源代码:
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/linux-2.6.32.2-mini2440-20100113.tgz
解压文件系统工具源代码busybox
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/busybox-1.13.3-mini2440.tgz
解压目标文件系统源代码
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/root_qtopia-20100108.tar.gz
解压qt工具源代码
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/x86-qtopia-20100108.tar.gz
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/arm-qtopia-20100108.tar.gz
解压测试实例程序源代码
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/examples-20100108.tar.gz
安装目标文件系统映象制作工具mkyaffs2image
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/mkyaffs2image.tgz -C
/
usr/sbin/mkyaffs2image
usr/sbin/mkyaffs2image-128M
安装logo制作工具LogoMaker
tar xzvf
/mnt/hgfs/LinuxShared/mini2440soft/logomaker.tgz -C /
usr/sbin/logomaker
解压安装完成以后,在linux下就准备了进行linux定制所需要的所有的源代码
arm-qtopia
busybox-1.13.3
linux-2.6.32.2
vboot
bootloader examples
root_qtopia(有不一样) x86-qtopia
安装配置nfs服务器
设置共享目录,在/etc/exports文件中加入如下一行:
/opt/FriendlyARM/mini2440/root_qtopia
*(rw,sync,no_root_squash)
*:
所有客户机都可以挂接此目录
rw:挂接此目录的客户机对该目录有读写权限。
no_root_squash:允许挂接此目录的客户机享有该主机的root身份
关闭防火墙:
service iptables status
service iptables stop
启动nfs服务:
/etc/init.d/nfs start
/etc/init.d/nfs restart
测试:
在本机上挂载nfs
[root@localhost sysconfig]# mount -t nfs
127.0.0.1:/opt/FriendlyARM/mini2440/root_qtopia /mnt
[root@localhost
sysconfig]# ls /mnt
bin etc
lib mnt proc sbin tmp
var
dev home linuxrc opt root sys
usr
www
可以看到/mnt目录下的内容和/opt/FriendlyARM/mini2440/root_qtopia/目录下的内容完全一致
用开发板测试:
1.Nand Flashi启动,开机时按k1-k6任意按键进入vivi交互命令模式
2.Nor
Flash启动,进入Suppervivi主功能菜单模式,输入q,进入Suppervivi交互命令模式,输入:
Supervivi> param
set linux_cmd_line "console=ttySAC0 root=/dev/nfs
nfsroot=192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
ip=192.168.1.230:192.168.1.188:192.168.1.188:255.255.255.0:sbc2440.arm9.net:eth0:off"
param :参数
set
linux_cmd_line:设置linux启动时的命令参数
console=ttySAC0
:使用控制字符终端ttySAC0
nfsroot:开发主机的ip+共享的启动文件系统目录
ip=目标板的ip+开发主机的ip+目标板上网关+子网掩码+开发主机名字+网卡名字
输入boot启动系统。
********************************************************
---U-boot定制---
已经移植好的MINI2440的UBOOT软件包:
tekkamanninja-U-boot-2009.11_tekkaman-16deca6.tar.gz
使用步骤:
cp
/mnt/hgfs/LinuxShared/tekkamanninja-U-boot-2009.11_tekkaman-16deca6.tar.gz
/opt
tar -xzvf tekkamanninja-U-boot-2009.11_tekkaman-16deca6.tar.gz
mv
tekkamanninja-U-boot-2009.11_tekkaman-16deca6.tar.gz
tekkamanninja-U-boot-2009.11
修改顶层Makefile文件
#CROSS_COMPILE =
arm-tekkaman-linux-gnueabi-
CROSS_COMPILE = arm-linux-
在顶层:
make
mini2440_config
make
生成uboot.bin文件
下载:1.NorFlash启动,Supervivi引导,选择【a】下载到NandFlash中(而【d】只下载到内存中)
2.NandFlash启动。。。(按CTRL+C进入shell状态)
在u-boot中建立自己的设备:
1.建文件夹
cd
/opt/FriendlyARM/mini2440 /tekkamanninja-U-boot-2009.11
cd
board/samsung/
mkdir my2440
2.拷贝资源
cp -rf ../tekkamanninja/mini2440/*
my2440/
3.修改资源中的.c文件名
mv mini2440.c my2440.c
4.复制.h头文件,并改为自己的名字
cd
../../../
#cp include/configs/mini2440.h
include/configs/my2440.h
5.修改my2440下的Makefile:
# COBJS :=
nand_read.o mini2440.o flash.o
COBJS := nand_read.o
my2440.o flash.o
6.修改顶层的Makefile:
增加:
my2440_config : unconfig
@$(MKCONFIG) $(@:_config=)
arm arm920t my2440 samsung s3c24x0
arm: CPU的架构(ARCH)
arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
my2440:
开发板的型号(BOARD),对应于board/my2440目录。可以依自己的喜好修改
samsung: 开发者/或经销商(vender)。
my2440的父目录,可以写成NULL
s3c24x0:
片上系统(SOC)。
7.在顶层下,编译生成u-boot.bin文件:
(在之前需要先编译一下mini2440_config,在tekkaman/mini2440/生成一些.o文件)
make
my2440_config
make
修改u-boot源代码,是得生成的u-boot适应于自己的开发板。
1.修改cpu/arm920t/start.S
cd
/opt/FriendlyARM/mini2440/tekkamanninja-U-boot/cpu/arm920t
gedit
start.S
修改该文件,在启动的时候增加自己开发板对led的控制
/*
@ bl coloured_LED_init
@ bl red_LED_on
*/
...
增加自己的代码
...
使用Supervivi下载时已经对CPU和RAM进行了初始化
如果将u-boot下载到NandFlash中并直接从NandFlash中启动(【a】下载),应该有cpu初始化。
此时注释,运行时能看到前面的代码修改后的效果,但不能继续启动。
#ifndef
CONFIG_SKIP_LOWLEVEL_INIT
//bl cpu_init_crit
#endif
2.修改:lib_arm/board.c
#if
defined(CONFIG_MINI2440_LED)
//gpio->GPBDAT = 0x0;
//tekkamanninja
#endif
重新编译下载执行
********************************************************
---Linux内核配置与编译---
1.*清理:
make clean:清除产生的文件,保留配置文件
make
mrproper:清除所有产生文件和配置文件
make
distclean:mrproper+清除备份和补丁
2.配置:(用来生成.config文件编译方案)
(在做好了的内核目录中,有config_mini2440_x35,直接复制成.config即可)
make
config:交互式配置
make oldconfig:是有已有配置文件(.config)
make xconfig :图形化配置
make
menuconfig:菜单型配置
[] 单选,按空格选择
<> 三选,按y,m,n或空格选择
-*
-必选
h为帮助,ESC返回上层菜单
3.编译内核:
make zImage:压缩的vmlinux
make uImage :U-boot用
make modules
定制自己的linux系统:
一、搭建环境
1.修改根目录下下Makefile文件:
export KBUILD_BUILDHOST :=
$(SUBARCH)
# 指定内核运行的平台环境和交叉编译器
ARCH ?=
arm
CROSS_COMPILE ?= arm-linux-
2.执行mini2440默认配置,使得.config按照默认设置配置。
make mini2440_defconfig
3.编译一下,看是否有问题
make
4.删除arch/arm/mach-s3c2440/mini2440.c ,拷贝mach-smdk2440.c
mv
mini2440.c mini2440.c.bak
cp arch/arm/mach-s3c240/mach-smdk2440.c
mach-mini2440
5.修改mini2440.c:
gedit
mini2440.c
1.修改开发板信息:
MACHINE_START(MINI2440, "mini2440
liaoyi")
2.修改系统时钟
s3c24xx_init_clocks(12000000);
3.将代码中的所有的smdk2440全部替换为mini2440
4.注释掉
//smdk_machine_init(); //smdk的初始化
6.在make menuconfig中显示:
gedit
arch/arm/mach-s3c2440/Kconfig
config
MACH_MINI2440
bool "Mini2440 Liaoyi"
select
CPU_S3C2440
select S3C2440_XTAL_12000000
select
S3C_DEV_USB_HOST
select S3C_DEV_NAND
help
meke
menuconfig->General setup->s3c2440 Machines -> MINI2440 development
board
*修改的内容在开发板中加载系统以后,使用cat /proc/cpuinfo可以在hardware项下看到
7.将mini2440.c生成的mini2440.o实际编译进内核
gedit
arch/arm/mach-s3c2440/Makefie
obj-$(CONFIG_MACH_MINI2440) += mach-mini2440.o
8.再次make mini2440_defconfig -> make 看修改是否有问题。
二、定义系统硬件资源驱动部分
1.新增Nandflash
//新增nandflash分区信息
static struct
mtd_partition friendly_arm_default_nand_part[] = {
[0] =
{
.name = "supervivi",
//定义一个系统启动代码分区
.size = 0x00040000,
//分区大小256K
.offset = 0,
},
[1] =
{
.name = "param",
//启动代码参数分区
.offset = 0x00040000,
//参数分区紧跟在启动分区的后面
.size = 0x00020000,
//参数分区的大小为128K
},
[2] = {
.name =
"Kernel", //内核分区
.offset =
0x00060000, //紧跟在参数分区的后面
.size =
0x00500000,
//大小5M,在当前NANDFLASH下
},
[3] = {
.name =
"root",
//根文件系统
.offset = 0x00560000,
.size = 1024 *
1024 * 1024, //1G,实际有多大是有具体的nandflash芯片来确定的
},
[4] =
{
.name = "nand",
.offset =
0x00000000,
//整个nandflash大小为1G,所以使用本分区表能够管理的最大的
nandflash就是1G
.size =
1024 * 1024 * 1024, //1G
}
};
static struct s3c2410_nand_set friendly_arm_nand_sets[] = {
[0] =
{
.name = "NAND",
.nr_chips =
1,
.nr_partitions =
ARRAY_SIZE(friendly_arm_default_nand_part),
.partitions =
friendly_arm_default_nand_part,
},
};
/* choose a set of timings which should suit most 512Mbit
* chips
and beyond.
*/
static struct s3c2410_platform_nand friendly_arm_nand_info =
{
.tacls = 20,
.twrph0 =
60,
.twrph1 = 20,
.nr_sets =
ARRAY_SIZE(friendly_arm_nand_sets),
.sets =
friendly_arm_nand_sets,
.ignore_unset_ecc = 1,
};
//把nand flash设备注册到系统中
static struct platform_device *mini2440_devices[]
__initdata =
{
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_nand,
//新增加一行对nandflash的支持
};
2.移植yaffs2文件系统
如果内核代码中没有yaffs2
cd yaffs2
./patch-ker.sh c
/opt/FriendlyARM/mini2440/linux-2.6.32.2
cd
linux-2.6.32.2/fs 多了一个yaffs2目录
make menuconfig
File System ->Miscellaneous
filesystems ->yaffs2
make zImage
下载:
supervivi
‘k‘
‘y‘
********************************************************
---文件系统定制---
文件系统的定制
文件系统的构建所需文件:
busyBox:集成压缩了许多linux工具和命令。
root_qtopia:提供了文件系统所需的库文件。
Mkyaffs2image:yaffs文件系统制作工具(解压在usr/bin中)(在yaffs2中也有)。
1.创建自己定制的文件系统的目录结构
创建顶层目录
mkdir
studyarm
cd studyarm
mkdir root bin sbin dev etc
boot tmp var usr sys proc lib mnt home
创建子目录
mkdir etc/init.d etc/rc.d
etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
mkdir var/lib var/lock var/run var/tmp
创建设备文件
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null c 1 3
ls dev
console null
修改var和var/tmp的目录属性
chmod 1777 tmp
chmod 1777
var/tmp
2.完成库文件的定制
切换到mini2440资源目录,对根文件系统代码进行解压
cd root_qtopia
cp -rfd lib/*
/opt/studyarm/lib/
3.编译配置busuybox
cd busybox-1.13.3
修改Makefile文件
# 修改交叉编译工具
CROSS_COMPILE
?=arm-linux-
# ARCH ?= $(SUBARCH)
ARCH ?=arm
修改config文件
cp fa.config .config
make
menuconfig
make
make CONFIG_PREFIX=/opt/studyarm
install
busybox的相关命令工具会自动安装到studyarm下的/bin,/sbin,/usr/bin里面。
完成上述操作以后,自己定制的文件系统中的命令(/bin, /sbin, /usr/bin, /usr/sbin目录下的命令)都准备好了
4.文件系统中配置文件的制作
拷贝几个主机的配置文件作为定制系统的配置文件
cd etc
cp
/etc/passwd ./
cp /etc/shadow ./
cp /etc/group ./
touch mdev.conf
ls
group init.d mdev.conf
passwd rc.d shadow sysconfig
编写下面的配置文件
touch sysconfig/HOSTNAME
gedit
sysconfig/HOSTNAME
在文件中加入主机名
etc/inittab 文件
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
实现/etc/init.d/rcS
cp /mnt/hgfs/LinuxShared/RCS
etc/init.d/rcS
实现fstab
gedit fstab
内容如下
#device mount-point type option dump fsck
order
proc /proc proc default 0 0
none /tmp ramfs default 0 0
sysfs /sys sysfs default 0 0
mdev /dev ramfs default 0 0
实现etc/profile文件
内容如下
#A sh profile
USER=“filesystest"
LOGNAME=$USER
PS1=‘[\u@\h\W]\$‘
PATH=$PATH
HOSTNAME=‘/bin/hostname‘
export USER LOGNAME PS1 PATH
5.制作文件系统映像
mkyaffs2image-128M rootfs
rootfs.img
注意:要在rootfs的上一层目录中操作,另外rootfs中要删除不必要的文件root_qtopia等,不然生成的文件
系统会很大。
生成的img就是可以下载到开发板上的文件系统的映像
ll rootfs.img
-rw------- 1 root root 5964288 09-16 17:11 rootfs.img
********************************************************
---系统综合---
Supervivi的使用:
[x] format NAND FLASH for Linux
[v] Download
vivi
USB下载Supervivi到NandFlash的vivi区
[k] Download linux
kernel
USB下载系统内核到NandFlash的kernel区
[y] Download root_yaffs
image USB下载yaffs文件系统到NandFlash的root区
[a] Absolute
User Application
USB下载u-boot到NandFlash的vivi区
[n] Download Nboot for WinCE
[l] Download
WinCE boot-logo
[w] Download WinCE NK.bin
[d] Download &
Run
USB下载至内存(option中指定地址)并启动(裸机驱动中使用过)
[z] Download zImage into RAM
[g] Boot
linux from RAM
[f] Format the nand flash
[b] Boot the
system
启动系统(根据启动参数启动)
[s] Set the boot
parameters
设置启动参数->子菜单
[u] Backup NAND Flash to HOST through USB(upload)
[r]
Restore NAND Flash from HOST through USB
[q] Goto shell of
vivi
进入vivi的shell命令交互模式(按menu返回主功能菜单模式)
[i] Version: 1138-2K
NOR
Flash启动,只能是Supervivi引导,此时能用dnw或超级终端或securecRT的串口进行通信和(启动,格 式化等)操作,也可以设置用网线来nfs网络文件系统来启动。
注意:dnw在系统启动后进入shell的操作时乱码,而超级终端和secureCRT正常。
启动系统后还可以用串口,用网线(tftp,nfs)进行传输文件
但是如果要下载,只能用dnw的USB下载到NandFlash或内存(d)。
NandFlsh启动,在Supervivi引导下输入q进入shell命令模式,可用secureCRT(网络)加载NFS网络文件系统
正常启动linux后,可通过超级终端(串口)或secureCRT(串口)/secureCRT(网线)传输文件 (tftp,NFS)
如果是u-boot引导加载,用网络(nfs或tftp)可加载主机的kernel或文件系统到内存启动,也 可以直接写到NandFlash中。
按光盘中的默认映像文件下载
NorFlash启动,Supervivi引导,用dnw,通过USB下载到NandFlash
1.下载文件系统(v):supervivi-128M
2.下载内核(k):zImage_X35
3.下载图形文件系统(y):rootfs_qtopia_qt4.img
用Supervivi下的b(boot)命令启动,第一次要屏幕校准。
启动linux后,实现主机与开发板的文件传输:
方式一:通过串口
接收文件:rz
发送文件:sz
[root@FriendlyARM /]#
rz
在菜单中选择window下的一个文件
成功后,在根目录下会出现该文件。
[root@FriendlyARM /]# sz hj.sh
方式二:通过网络(tftp)
用ftp-server在window下共享一个目录。设置好用户和密码。
Kernel
2.6.32.2-FriendlyARM on (/dev/pts/0)
FriendlyARM login: root
[root@FriendlyARM /]# ls
[root@FriendlyARM /]# ftp
192.168.1.10
Connected to 192.168.1.10.
220 Serv-U FTP
Server v6.1 for WinSock ready...
Name (192.168.1.10:root):
liao
331 User name okay, need password.
Password:
230 User logged in, proceed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp> get
xiangtangprsget.c
local: xiangtangprsget.c remote:
xiangtangprsget.c
200 PORT Command successful.
150 Opening
BINARY mode data connection for xiangtangprsget.c (6608 Bytes).
226
Transfer complete.
6608 bytes received in 0.0213 secs (3e+02
Kbytes/sec)
ftp> bye
221 Goodbye!
[root@FriendlyARM /]# ls
addressbook.txt
linuxrc
sbin
bin
lost+found sys
dev
mnt
tmp
etc
opt
usr
hj.sh
proc
var
home
rcs
www
lib
root
xiangtangprsget.c
Supervivi下,启动nfs网络文件系统:
1.主机linux安装配置nfs(前面有介绍)
2.主机linux下启动nfs服务
[root@localhost root_qtopia]# /etc/init.d/nfs start
3.主机的ip地址和开发板配置在相同的网段,并保证两者之间的网络能够直接连通(把虚拟机的网络连接方式设置为桥接)
[root@localhost root_qtopia]# ifconfig eth4 192.168.1.188 netmask
255.255.255.0
[root@localhost root_qtopia]# ping
192.168.1.230
4.开发板启动进入suppervivi命令提示符下
在Supervivi模式下输入如下命令
Supervivi> param set linux_cmd_line
"console=ttySAC0 root=/dev/nfs
nfsroot=192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
ip=192.168.1.230:192.168.1.188:192.168.1.1:255.255.255.0:mini2440.arm9.net:eth0:off"
其中 ,param set linux_cmd_line 是设置启动 linux 时的命令参数。其各参数的含义 如下:
nfsroot 是自己开发主机的IP 地址。
“ip=”后面:
第一项(192.168.1.230)是目标板的临时IP(注意不要和局域网内其他IP 冲突);
第二项(192.168.1.112)是开发主机的IP;
第三项(192.168.1.1)是目标板上网关(GW)的设置;
第四项(255.255.255.0)是子网掩码;
第五项是开发主机的名字(一般无关紧要,可随便填写)
eth0
是网卡设备的名称--开发板的网卡。
Supervivi> boot
注意:启动的是我们虚拟机中linux系统下的nfs共享目录下的文件系统
U-boot的使用:
将自己定制的uboot下载到开发板上--将开发板启动方式设置为nor启动,输入a,下载uboot,再将开发板的
启动方式设置为nand,启动系统,按CTL+C进入uboot
[u-boot@MINI2440]# printenv
bootargs=noinitrd root=/dev/nfs rw
nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs
ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc
mem=64M
bootcmd=nfs 0x30008000
192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
ipaddr=192.168.0.2
serverip=192.168.0.1
gatewayip=192.168.0.1
netmask=255.255.255.0
tekkaman=bmp d 70000
stdin=serial
stderr=serial
ethact=dm9000
环境变量的设置
[u-boot@MINI2440]# setenv ipaddr
192.168.1.230
[u-boot@MINI2440]# printenv
bootargs=noinitrd
root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs
ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc
mem=64M
bootcmd=nfs 0x30008000
192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
serverip=192.168.0.1
gatewayip=192.168.0.1
netmask=255.255.255.0
tekkaman=bmp
d
70000
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
ipaddr=192.168.1.230
Environment size: 472/131068 bytes
[u-boot@MINI2440]# setenv serverip
192.168.1.10
[u-boot@MINI2440]# printenv
bootargs=noinitrd root=/dev/nfs
rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs
ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc
mem=64M
bootcmd=nfs 0x30008000
192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
gatewayip=192.168.0.1
netmask=255.255.255.0
tekkaman=bmp
d
70000
stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
ipaddr=192.168.1.230
serverip=192.168.1.10
Environment size: 473/131068 bytes
环境变量设置完成只是当次有效,如果需要永久有效,需要使用saveenv命令来保存对于环境变量的设置进入nandflash中
[u-boot@MINI2440]#
saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at
0x6000000000002 -- 0% complete.
Writing to Nand... done
[u-boot@MINI2440]# ping 192.168.1.10
dm9000 i/o: 0x20000300, id:
0x90000a46
DM9000: running in 16 bit mode
MAC:
08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000
device
host 192.168.1.10 is alive
uboot引导系统内核
1.制作uboot引导的内核映像文件uImage
mkimage –n ‘newer’ –A
arm –O linux –T kernel –C none –a 0x30008000 –e 0x30008040 –d zImage
uImage
-n 指定映像的名字 -- newer
-A 指定平台体系结构 -- arm
-O
指定操作系统的类型 -- linux
-T 指定映像类型 -- kernel
-C 指定压缩方式
--none -- 不压缩
-a 指定映像在内存中的位置 -- 最后下载到系统中的位置
-e 指定映像的运行入口地址
-- 下载地址加64字节
-d 指定制作映像的源文件
mkimage -n ‘testimage‘ -A arm -O
linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage_T35
myuImage
先将uboot下tools目录中的mkimage拷贝到系统目录
[root@localhost tools]# cp mkimage /bin
[root@localhost tools]# cd
/opt/FriendlyARM/mini2440/root_qtopia/
[root@localhost root_qtopia]#
mkimage -n ‘testimage‘ -A arm -O linux -T kernel -C none -a 0x30008000 -e
0x30008040 -d zImage_T35 myuImage
Image Name:
testimage
Created: Wed Sep 18 11:08:38
2013
Image Type: ARM Linux Kernel Image
(uncompressed)
Data Size: 2517028 Bytes = 2458.04 kB
= 2.40 MB
Load Address: 30008000
Entry Point:
30008040
[root@localhost root_qtopia]# ls
bin
linuxrc root
tmp zImage_T35
dev mnt rootfs.img
u-boot.bin
etc myuImage
sbin usr
home
opt
sys var
lib proc
test www
*也可以直接在内核源代码目录下使用make uImage命令直接生成uImage文件
2.通过nfs下载内核映像到内存并运行
# nfs 30008000
192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
/myuImage
#
bootm 30008000
也可以使用nfs下载内核到内存,保存到nandflash中
# nfs 30008000
192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
/myuImage
#
nand erase 0x80000 0x300000
# nand write 0x30008000 0x80000
0x300000
# nand read 0x30008000 0x80000 0x300000
# bootm
0x30008000
通过上述命令已经将内核映像下载到nandflash中,以后每一次运行uboot以后都可以通过nand
read将nandflash中的内核读入到内存中,然后使用bootm来加载内核系统
3.uboot烧入文件系统
setenv bootargs noinitrd
root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc
mem=64M
通过uboot使用nfs引导主机上的内核和文件系统
设置uboot的命令
[u-boot@MINI2440]# setenv bootcmd nfs 0x30008000
192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
/myuImage\; bootm
0x30008000
[u-boot@MINI2440]# setenv bootargs noinitrd root=/dev/nfs
rw nfsroot =192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
ip=192.168.1.230:192.168.1.188:192.168.1.1:255.255.255.0 console=ttySAC0,115200
init=/linuxrc mem=64M
[u-boot@MINI2440]# boot
移植QT到目标板
添加触摸屏支持库
tar jxf tslib-1.4.tar.bz2
cd
tslib
./autogen.sh
./configure
--prefix=/usr/local/arm/qte/tslib
--host=arm-linux
ac_cv_func_malloc_0_nonnull=yes
make
make
install
移植QT到目标板
tar zxf
qt-everywhere-opensource-src-4.6.2.tar.gz
cd
qt-everywhere-opensource-src-4.6.2
配置QT
./configure -prefix /usr/local/arm/qte/4.6.2
\
-no-qt3support \
-qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg \
-no-openssl -no-cups -no-iconv -embedded arm \
-xplatform qws/linux-arm-g++ \
-qt-mouse-tslib -little-endian \
-I/usr/local/arm/qte/tslib/include \
-L/usr/local/arm/qte/tslib/lib \
-nomake
examples -nomake demos
编译QT
make
安装QT
make install
设置开发库路径
PATH=/usr/local/arm/qte/4.6.2/bin:$PATH
进行交叉编译
qmake -project
qmake
make
-------------------------------------------------------------------------------
注意:
export
QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0",在移植的所有工作都完成以后,发现LCD屏上的字体非常小。把其中的数字值都改为其一半的时候,屏上的字体就比较大了。
1. 复制/usr/local/arm/qte/tslib 到 开发板的 /usr/qte下
2. 把/usr/local/arm/qte/4.6.2/lib下对应的LibQtGui.*, libQtCore.*
libQtNetwork.*, libQtsql.* 打包,
然后到开发板根文件系统 /usr/qte/lib下解包
3. /usr/local/arm/qte/4.6.2/lib/下的 fonts目录也要复制到开发板根文件系统 /usr/qte/lib里
4.然后
# 修改 rootfs/etc/profile ,
添加环境变量
# export TSLIB_ROOT=/usr/qte/tslib
#
export QTEDIR=/usr/qte/4.6.2
# export
TSLIB_CONSOLEDEVICE=none
# export
TSLIB_FBDEVICE=/dev/fb0
# export
TSLIB_TSDEVICE=/dev/input/event0
# export
TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal
# export
TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
# export
TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
# export
QWS_MOUSE_PROTO=tslib:/dev/input/event0
# export
LD_LIBRARY_PATH=TSLIB_ROOT/lib
# export
POINTERCAL_FILE=$TSLIB_ROOT/etc/pointercal
# export
LIBRARY_PATH=$TSLIB_ROOT/lib:$QTEDIR/lib:$LD_LIBRARY_PATH
5 你把开发板中/usr/qte/tslib/etc/ts.conf
的
# Uncomment if you wish to use the
linux input layer event interface
module_raw
input
中module_raw input前面的空格去掉就可以了。
6.运行/Tslib/bin/ts_calibrate获得校准文件/etc/pointercal
7.运行/Tslib/bin/ts_test
测试触摸屏
至此 Tslib可以测试通过。
8.运行 qttest -qws
linux系统构建基础学习笔记——操作,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/liaoyi425/p/3766521.html