建议开发板:
XXX6410
开发板接口简介
本UT6410开发板的内存地址范围:0x50000000-0x58000000
1.1版本特性:
1、内核版本:linux2.6.28
2、图形界面:Qtpia
2.2.0
3、根文件系统:yaffs2
3、Bootloader版本:u-boot-1.1.6
4、交叉编译器:cross-4.3.2
1.2功能特性:
1、支持MPEG4/H264/H263/VC-1多媒体硬件编解码
2、多重解码,四分屏硬件解码视频
3、支持
JPEG硬件编解码
4、支持摄像头采集、回显、视频编码、JPEG编码
5、支持
2D/3D硬件加速
6、支持
2.8~10.4多种不同尺寸液晶屏
7、支持
TVOUT输出
8、支持
VGA输出
9、支持
USB鼠标、键盘
10、支持触摸屏校正
11、支持
mediaplayer播放视频
12、支持图片浏览器、文件管理、日历、时钟、计算器
13、支持手写输入、键盘输入、终端
14、支持插件管理
15、支持多款内置游戏
16、支持NANDFLASH、USB、SD/HSMMC、AUDIO、ETHERNET、
UART、LCD、TOUCH、CAMERA、SPI、IIC、DMA、KEYPAD、
RTC、MFC、JPEG等驱动
1.3UT-S3C6410开发板
1、交叉串口线(双母头)
2、用于连接开发板
COM0和 PC 机 COM 口进行调试用
3、网线:用于网络功能测试
4、USB数据线:用于下载镜像
5、12V/2A
DC电源适配器:用于给开发板供电
6、SD卡:用于初次烧写时,从
SD启动(请选用 2G 以内的标准 SD卡)
7、USB接口
SD 读卡器:用于在 PC端烧写启动代码至 SD卡中
arm-linux-source开发包简介
u-boot-sd.binu-boot-nand.bin zImage rootfs2010*
1、u-boot-sd介绍
u-boot-sd是用于开发板从
SD卡启动的引导镜像,主要用于开发板第一次烧写时使用,也就是 nand flash是空的时候,通过SD卡来启动 u-boot-sd,u-boot-sd支持通过
USB OTG接口高速下载并烧写镜像至 nand flash。u-boot-sd仅适用于第一次烧写,如果nand flash中已经烧写有 u-boot-nand,则不需要 u-boot-sd启动了。
2、u-boot-nand介绍
u-boot-nand是烧写于
nand flash,用于从 nand flash启动的引导镜像,u-boot-nand支持 USB OTG下载镜像、nand flash读、写、擦除等。u-boot-nand基于 u-boot-1.1.6版本。
3、zImage介绍
zImage是内核镜像文件,基于 urbetter-linux2.6.28-v1.0版本源码。
4、rootfs介绍
Rootfs是根文件系统,我们提供的根文件系统类型为 YAFFS2,支持两种方式启动:
1、NFS网络根文件系统
2、从 nand flash启动 YAFFS2文件系统
u-boot-sd启动模式: 0111
1100
u-boot-nand启动模式: 0110 0100
一、搭建嵌入式开发环境
移植简述方法:
在PC机Ubuntu12.04上通过minicom串口终端,将ubootzImage通过tftp服务器下载到S3C6410的nand
flash里面,通过网络NFS挂载根文件系统rootfs,最终完成移植工作。
第1步:
硬件连接
电源线电流大于1A以上(内正外负),网线连接,USB转串口线连接。
把 u-boot-sd.bin写到 SD卡
a)把SD卡插入
pc
b)fdisk -l查看SD卡对应的设备文件
c)./write_sd /dev/sdb ~/ut6410/tools/u-boot-sd.bin
第2步:
安装Ubuntu12.04系统,在里面安装minicom2.5,并配置环境。操作如下:
成功登录Ubuntu以后,按Ctrl+Alt+T,在弹出的终端界面输入
toshiba@ubuntu:~$ sudo apt-get installminicom
[sudo] password for toshiba:
根据下载提示,输入 y ,等待下载安装完成。
toshiba@ubuntu:~$ sudo minicom -s
[sudo] password for toshiba:
+-----[configuration]------+
| Filenames and paths |
| File transfer protocols |
|
Serial port setup |
| Modem and dialing |
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
| Exit from Minicom |
+--------------------------+
选择Serialport setup
+-----------------------------------------------------------------------+
|
A - Serial Device :/dev/ttyUSB0 |
|B - Lockfile Location :/var/lock |
|C - Callin
Program : |
|D - Callout
Program : |
|E - Bps/Par/Bits :
115200 8N1 |
|
F- Hardware Flow Control :No |
|G - Software Flow Control : No |
| |
| Change
which setting? |
+-----------------------------------------------------------------------+
输入a ,修改Serial Device :/dev/ttyUSB0
输入f,修改Hardware Flow Control : NO
….
修改成如图所示,按Enter键保存,退到前一界面
选择 Save setup as dfl,按Enter键保存
选择选择Exit。
以上基本完成minicom的配置,退出后会进入到Initializing Modem界面
+-----------------------+-------
| |
| Initializing
Modem |
| |
+-----------------------+-------
然后就会进入下面的SDboot启动界面
U-Boot 1.1.6 (Sep 17 2014 - 15:02:21) forSMDK6410
****************************************
** UT-S3C6410
SD boot v0.18 **
** ShenZhen Urbetter Technology **
** Http://www.urbetter.com **
****************************************
CPU: S3C6410@532MHz
Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC
Mod
Board: SMDK6410
DRAM: 128 MB
Flash: 0 kB
NAND: 256 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
[u-boot-sd]#
查看uboot开发板输出信息,uboot命令和环境变量简介
Sav保存环境变量
Pri打印环境变量
Set修改或者删除环境变量
输入pri,显示
bootdelay=3
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
ipaddr=192.168.1.20
erverip=192.168.1.32
gatewayip=192.168.1.1
netmask=255.255.255.0
bootargs=root=/dev/mtdblock2console=ttySAC0
bootcmd=nandread 50008000 40000 300000;bootm 50008000
stdin=serial
stdout=serial
stderr=serial
Environmentsize: 281/16380 bytes
第3步:
完成上面两步以后,只是简单的通过串口,查看开发板的一些信息。
现在需要使开发板与PC机之间进行简单的通讯,然后通过tftp服务器,下载u-boot-nand.bin(使开发板转为nand启动方式)、zImage(内核镜像文件,启动内核),所以先要配置tftp服务器
配置tftp服务器
(1).安装tftp所需的软件。首先需要安装tftp-hpa,tftpd-hpa,前者是客户端,后者是服务程序,在终端下输入
sudo apt-get install tftp-hpa tftpd-hpa,安装tftp-hpa和tftpd-hpa。然后还需要安装xinetd,在终端下输入 sudoapt-get install xinetd,安装好xinetd。
(2).配置相关服务文件。进入根目录下的etc文件夹(cd /etc/),首先看目录中有没有一个xinetd.conf文件,如果没有则新建一个,有的话查看内容,看是否与下面的一致,若不一致则修改,内容如下:
sudo vim /etc/xinetd.conf
#Simple configuration file for xinetd
#
#Some defaults, and include /etc/xinetd.d/
defaults
{
#Please note that you need a log_type line to be able to use log_on_success
#and log_on_failure. The default is the following :
#log_type = SYSLOG daemon info
}
includedir /etc/xinetd.d
(3).配置tftp服务器
命令:
sudo vim /etc/default/tftpd-hpa (使用vim先安装包,sudo
apt-getinstall vim)
将内容修改成
#/etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
#这是你tftp服务器的工作目录,自行修改,注意,在新建工作目录时,最好修改其权限为777,命令sudo
chmod 777 /tftpboot
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
(4).然后进入xinetd.d文件夹(cd xinetd.d),查看是否有一个tftp文件,如果没有就新建一个,如果有的话就查看内容是否与下面的一致,不一致则修改,内容如下:
service tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
#log_on_success += PID HOST DURATION
#log_on_failure += HOST
per_source = 11
cps =100 2
flags =IPv4
}
其中server_args一行是配置服务器的文件存放的位置,就是进行tftp传输的时候,都是从该文件夹中搜索文件的
(5).修改所需文件夹的权限。需要修改的文件夹也就是上一步提到的那个服务器文件存放的文件夹,以我的配置文件为例,创建一个文件夹(sudo mkdir /tftpboot),然后把它可以设置成访问权限最宽松的(sudo
chmod 777 /tftpboot),也可以设置成合适的权限。
(6).重新启动服务。sudo service tftpd-hpa restart,这也是我经常疏忽的一步,当配置好tftp的配置文件后,需要重新启动一下xinetd,在终端中输入
sudo /etc/init.d/xinetd reload,重新加载一下进程,再输入 sudo /etc/init.d/xinetd restart,重启服务。记住,每次修改完配置文件后,都需要重新启动一下服务。
执行次序:
sudo service tftpd-hpa restart
sudo /etc/init.d/xinetd reload
sudo /etc/init.d/xinetd restart
第4步:搭建NFS网络文件系统
(1)安装 nfs
apt-get install nfs-kernel-server
apt-get install portmap nfs-common
(2)编辑/etc/exports
/nfsroot *(rw,sync,no_root_squash)
*表示任意IP地址,sync表示同步,no_root_squash表示无论是什么用户都可以以root用户的权限操作该目录
(3)修改挂载点的属性
chmod 777 /nfsroot
(4)重启nfs
sudo /etc/init.d/nfs-kernel-server restart
sudo /etc/init.d/portmap restart (redhat5 是portmap, Redhat
6 改名为
rpcbind)
( sudo /etc/init.d/rpcbind restart )
(5)在本机上测试
showmount -e
mount 172.20.149.190:/nfsroot /mnt/
ls -l /mnt
注:可以通过一个符号链接来export NFS目录,但在/etc/exports下所添加的挂载点应为真正的目录。比如建一符号链接
二、嵌入式环境简单配置
u-boot-sd启动模式: 0111
1100
u-boot-nand启动模式:0110 0100
(1).启动minicom后,在SD卡启动模式下,
Hitany key to stop autoboot: 0
[u-boot-sd]#
输入pri后,查看开发板的环境参数后设置开发的参数
修改开发板的环境变量
[u-boot-sd]#Setserverip 192.168.1.32
[u-boot-sd]#Save
在用开发板 ping主机(和开发板链接的 PC)
[u-boot-sd]#Ping192.168.1.253
......isalive表示通
[u-boot-sd]# tftp 50008000 zImage
[u-boot-sd]#bootm 50008000如果启动成功
LCD上会出现小企鹅,过一会后 LCD 上出现图形界面,minicom中出现控制终端(shell)。
[u-boot-sd]# set bootargs "root=/dev/nfsnfsroot=192.168.1.32:/nfsroot
ip=192.168.1.20 console=ttySAC0,115200" //告诉板子其根文件系统在网络的哪里。root=/dev/nfs表示根文件系统的位置,nfsroot=192.168.1.32:/nfsroot ip=192.168.1.20主机ip和板子ip,console表示控制端,ttySAC0指设备控制终端
[u-boot-sd]#sav
(2).把uboot zImage rootfs都写到开发板
在内核启动过程中会输出:
0x00000000-0x00040000 :"Bootloader"
/dev/mtdblock0
0x00040000-0x00400000 : "Kernel"
/dev/mtdblock1
0x00400000-0x05400000 : "Rootfs"
/dev/mtdblock2
0x05400000-0x10000000 : "FileSystem"
/dev/mtdblock3
把uboot写到nand
[u-boot-sd]# nand erase
[u-boot-sd]# nand scrub
y enter
[u-boot-sd]# tftp 50000000 u-boot-nand.bin
[u-boot-sd]# nand write 50000000 0 40000
关掉电源,切换为 nand启动,上电,如果成功出现:
****************************************
** UT-S3C6410NAND
boot v0.18 **
** ShenZhen Urbetter Technology **
** Http://www.urbetter.com **
****************************************
CPU: S3C6410@532MHz
Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC
Mod
Board: SMDK6410
DRAM: 128 MB
Flash: 0 kB
NAND: 256 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
[u-boot-nand]#
重新修改开发板的环境参数
[u-boot-nand]# set serverip 192.168.1.32
[u-boot-nand]# sav
[u-boot-nand]# tftp 50000000 zImage
[u-boot-nand]# nand erase 40000 300000
[u-boot-nand]# nand write 50000000 40000300000
测试:
[u-boot-nand]# nand read 50008000 40000300000
[u-boot-nand]# bootm 50008000
启动成功会出现小企鹅
把跟文件系统写到 nand
[u-boot-nand]# set bootargs root=/dev/nfs
nfsroot=192.168.,1.32:/nfsrootip=192.168.1.20
console=ttySAC0,115200
[u-boot-nand]# sav
[u-boot-nand]# nand read 50008000 40000300000
[u-boot-nand]# bootm 50008000
制作开发板的网络文件系统
toshiba@ubuntu:~$tar -xvf nfsroot20130805.tar.bz2 -C /nfsroot
toshiba@ubuntu:~$/nfsroot
告诉开发板根文件系统在网络上
在开发板上,bootargs环境变量用来指定根文件系统的位置
[u-boot-nand]#set bootargs root=/dev/nfs nfsroot=192.168.1.32:/nfsroot
ip=192.168.1.20 console=ttySAC0, 115200
[u-boot-nand]#sav
[u-boot-nand]#tftp 50008000 zImage3.4.24
[u-boot-nand]#bootm 50008000
如果启动成功,在开发板的LCD上会出现图形界面,在minicom会出现shell [XXX@XX]#(可以自己修改如[ILoveYou@Linux]#请参考内核编译)
把根文件系统写到nand
[u-boot-nand]#set bootargs root=/dev/nfs nfsroot=192.168.1.32:/nfsroot
ip=192.168.1.20console=ttySAC0
[u-boot-nand]#sav
[u-boot-nand]#nand read 50008000 40000 300000
[u-boot-nand]#bootm 50008000
如果启动成功在开发板的LCD上出现图形界面,在minicom中出现shell
[XXX@XX]#
主机上操作下一句:
toshiba@ubuntu:~$tar -xvf nfsroot20130805.tar.bz2 -C /nfsroot
以下在开发板操作:
[XXX@XX]#
ls /dev/mtdblock*
[XXX@XX]#
mkdir mnt2
[XXX@XX]#
mount/dev/mtdblock2 /mnt2/
[XXX@XX]#
tar -xvf/nfsroot20130805.tar.bz2 -C /mnt2
[XXX@XX]#
sync
[XXX@XX]#
reboot
[u-boot-nand]#set bootargs root=/dev/mtdblock2
console=ttySAC0
[u-boot-nand]#sav
[u-boot-nand]#nand read 50008000 40000 300000
[u-boot-nand]#bootm 50008000
设置为自动启动
[u-boot-nand]# set bootcmd "nand
read50008000 40000 300000;bootm 50008000"
[u-boot-nand]#set bootdelay 1
[u-boot-nand]#sav
[u-boot-nand]#reset
校正触摸屏
安装交叉编译器 ***"安装arm-linux-gcc"***
方法1:设置全局arm编译工具
PC:
(1)toshiba@ubuntu:~#
.cd /nfsroot;
toshiba@ubuntu:~#mkdir
test;
(2)toshiba@ubuntu:~#.mkdir
/usr/local/arm;
toshiba@ubuntu:~#
cd ~/smdk6410_lzy/src;
toshiba@ubuntu:~#
tar -jxvf arm-linux-gcc.tar.bz2 -C
/usr/local/arm
(3).toshiba@ubuntu:~#vim:/etc/profile
//添加下面一行
PATH=/usr/local/arm/4.3.2/bin:$PATH //:$PATH表示追加,不修改之前的内容
(4)toshiba@ubuntu:~#.source/etc/profile
//每个使用终端都需要执行本命令,或者重启机器
可执行程序可以通过
方法2设置当前登录用户arm编译工具
PC:
toshiba@ubuntu:~$
sudo mkdir /usr/local/arm
toshiba@ubuntu:~$sudo
tar -xvf arm-linux-gcc.tar.bz2 -C /usr/local/arm/
toshiba@ubuntu:~$sudo
vim ~/.bashrc
export PATH=/usr/local/arm/4.3.2/bin:$PATH
让.bashrc生效的方法:
1.toshiba@ubuntu:~$source
.bashrc
2.toshiba@ubuntu:~$sudo
source ~/.bashrc
3.toshiba@ubuntu:~$sudo
. ~/.bashrc
测试:
toshiba@ubuntu:~$ touch
hello.c
toshiba@ubuntu:~$ arm-linux-gcc
hello.c -o hello
toshiba@ubuntu:~$sudo
cp hello /nfsroot
1.如果挂载的是网络文件系统
[XXX@XX]#
./hello
2.如果挂载的是本地文件系统
[XXX@XX
/]# ifconfig eth0 192.168.1.20
[XXX@XX
/]# mount -tnfs -o nolock,rw 192.168.1.32:/nfsroot /mnt (关PC防火墙,root用户)
用户太程序移植过程:
./configure--help
./configure--host=arm-linux --prefix=/home/install CC=arm-linux-gcc
....
make&& make install
以下仅供参考
编译uboot (uboot的安装包经过一定的修改后按照下面方法操作即可,修改地方可以使用对比工具Beyond Compare3 查看官方版与修改版,很方便的)
我的分享uboot地址:http://yunpan.cn/cgk5kJRtbZL36
访问密码 659b
SD卡启动:
[root]#tar -xvf u-boot-1.1.6.tar.bz2
[root]#cd u-boot-1.1.6_smdk6410/
[root]#vim Makefile161
CROSS_COMPILE =arm-linux-
[root]#make smdk6410_config
[root]#vim include/configs/smdk6410.h
205 #define CFG_PROMPT "[XXX@SD]#
"
188 #define CONFIG_SERVERIP 192.168.1.32
183 #define CONFIG_BOOTARGS "root=/dev/nfsnfsroot=192.168.1.32:/nfsroot
ip=192.168.1.20 console=ttySAC0"
445 /* Boot configuration (define
only one ofnext) * /
446 //#define CONFIG_BOOT_NOR
447 //#define CONFIG_BOOT_NAND
448
#defineCONFIG_BOOT_MOVINAND
449 //#define CONFIG_BOOT_ONENAND
450 //#define CONFIG_BOOT_ONENAND_IROM
[root]#make -j2
u-boot= [ELF][u-boot.bin]
[root]#./mkmovi
[root]#mkdir~/uboot
[root]#cp u-boot-movi.bin ~/uboot/
(生成u-boot-movi.bin改名u-boot-sd.bin)
[root]#cp System.map ~/uboot/System_movi.map
NAND启动:
在SD卡启动的基础上修改
[root@localhostu-boot-1.1.6_smdk6410]# vim include/configs/smdk6410.h
205 #define CFG_PROMPT "[XXX@NAND]#
"
445 /* Boot configuration (define
only one ofnext) * /
446 //#define CONFIG_BOOT_NOR
447
#define CONFIG_BOOT_NAND
448 //#define CONFIG_BOOT_MOVINAND
449 //#define CONFIG_BOOT_ONENAND
450 //#define CONFIG_BOOT_ONENAND_IROM
[root]#make -j2
[root]#./mknand
[root]#cp u-boot-nand.bin ~/uboot/
[root]#cp System.map ~/uboot/System_nand.map
编译内核
2.6内核编译
[root@localhostsrc]# tar -xvf linux-2.6.28.tar.bz2
[root@localhostsrc]# cd linux-2.6.28_smdk6410/
[root@localhostsrc]# vim .cross_compile
arm-linux-
[root@localhostlinux-2.6.28_smdk6410]# cp smdk6410_config .config
[root@localhostlinux-2.6.28_smdk6410]# make menuconfig
Device Drivers --->
Graphics support --->
<*> Support for frame bufferdevices --->
Select LCD Type (UT_LCD43C_D
480*272) --->
[root@localhostlinux-2.6.28_smdk6410]# make -j2
[root@localhostlinux-2.6.28_smdk6410]# cd drivers/video/samsung/
[root@localhostsamsung]# mv s3cfb_UT_LCD43C_D\ .c s3cfb_UT_LCD43C_D.c
[root@localhostsamsung]# cd ../../../
[root@localhostlinux-2.6.28_smdk6410]# make
[root@localhostlinux-2.6.28_smdk6410]# cp arch/arm/boot/zImage /tftpboot/
制作根文件系统
[root@localhostsrc]# tar -xvf busybox-1.20.1.tar.bz2
[root@localhostsrc]# cd busybox-1.20.1
[root@localhostsrc]# vim Makefile
164CROSS_COMPILE =arm-linux-
[root@localhostbusybox-1.20.1]# make defconfig
[root@localhostbusybox-1.20.1]# make menuconfig
BusyboxSettings --->
Build Options --->
[*] Build BusyBox as a static
binary (noshared libs)
LinuxModule Utilities --->
[ ] Simplified modutils
[*] insmod
[*] rmmod
[*] lsmod
[ ] Pretty
output (NEW)
[*] modprobe
[ ] Blacklist
support (NEW)
[*] depmod
[root@localhostbusybox-1.20.1]# make -j2
[root@localhostbusybox-1.20.1]# make install
[root@localhostbusybox-1.20.1]# cd _install/
[root@localhost_install]# mkdir /myrootfs
[root@localhost_install]# cp * /myrootfs/ -rf
[root@localhost_install]# cd .
[root@localhostbusybox-1.20.1]# cp examples/bootfloppy/etc/ /myrootfs/
-rf
[root@localhostbusybox-1.20.1]# cd /myrootfs
[root@localhostmyrootfs]# mkdir dev sys proc root mnt tmp opt
[root@localhostmyrootfs]# cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/
. -rf
挂在proc和sysfs的两种方式:
1.[root@localhostmyrootfs]# vim etc/init.d/rcS
mount-t proc none /proc
mount-t sysfs none /sys
mount-t tmpfs none /tmp
2.[root@localhostmyrootfs]# vim etc/fstab
proc /proc
proc defaults 0 0
sysfs/sys sysfs
defaults 0 0
tmpfs/tmp tmpfs defaults
0 0
udev/mdev用来监视设备的注册和注销以创建设备结点
[root@localhostmyrootfs]# vim etc/profile
echo"Hello, it is my file system"
#让mdev实现udev的功能
1.echo'/sbin/mdev -s' > /proc/sys/kernel/hotplug
2.mdev-s
HOME=/root
PS1="[root@uplooking\W]# "
[root@localhostmyrootfs]# mknod dev/console c 5 1
[root@localhostmyrootfs]# mknod dev/tty2 c 4 2