嵌入式开发笔记一(Tiny6410开发板)

来源:互联网 发布:淘宝卖家虚拟物品 编辑:程序博客网 时间:2024/06/09 20:19

嵌入式开发第一天:

1.安装VMWare虚拟机
2.安装Linux操作系统(Redhat,ubuntu,fedora)
硬件(10%)+软件
处理器:ARM
操作系统:嵌入式Linux
编程语言:C/C++(汇编)
3.安装VMware Tools(reboot)
4.配置网络
系统 -> 管理 ->网络 静态IP 取消激活->激活
如果网络一直有问题,重启,重新激活,VM setting Connected 勾去掉,再勾上
service network restart
ifconfig
service iptables stop
setenforce 0
windows ping linux
linux ping windows
5.服务配置  挂载就是把光驱里的内容以文件的形式查看
1)tftp服务器(xinetd子服务)
rpm -qa | grep tftp
chkconfig --list
安装tftp服务器rpm -ivh xx.rpm
chkconfig --list tftp
chkconfig tftp on
service xinetd status|start
cd /tftpboot
echo test > ok.txt
gedit /etc/xinetd.d/tftp &
server_args  = -s /tftpboot -c
service xinetd restart
chmod 777 /tftpboot
ls -ld /tftpboot
2)nfs服务器(网络文件系统)
rpm -qa | grep nfs
chkconfig --list nfs
gedit /etc/exports &
/embedded 192.168.1.*(rw,sync,no_root_squash)
service nfs restart

mount -t nfs 192.168.1.200:/embedded mymnt


6.搭建嵌入式开发环境
1)编辑源文件:gedit hello.c &
2)编译源文件:gcc hello.c  -> a.out
3)运行 ./a.out(X86 PC 处理器)
嵌入式交叉开发(交叉编译):
1)编辑源文件:gedit hello.c &
2)编译源文件:arm-linux-gcc hello.c  -> a.out
3)运行 ./a.out(ARM开发板)
安装arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz(解压加配置)
tar -xzvf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
opt是解压出来的目录

/etc/profile   对所有用户都生效
/root/.bashrc  只对root生效
export PATH=$PATH:/embedded/opt/FriendlyARM/toolschain/4.5.1/bin
source /root/.bashrc  重新加载

7.嵌入式Linux系统的启动过程:
1)bootloader(启动加载器) 现在业类使用最广泛的uboot  类似于PC机上的BIOS
2)kernel(操作系统内核)  嵌入式Linux相对Linux做了裁剪
3)rootfs(根文件系统,带GUI)  Windows下有NTFS FAT32

8.连接开发板
1)连接电源线
2)连接串口线(若机器没有串口,买一根USB转串口线)
超级终端(windows 通讯下超级终端):   Linux有minicom
笔记本com1
台式com2
115200

开电源:1或3秒内按下PC回车键进入uboot启动菜单
NAND: 256 MiB(磁盘),
RAM: 128 MiB(内存)
按下f格式化整个开发板的nand flash

如果串口转USB,则需要先安装相应程序(注意,安装串口转USB驱动时,不要有任何USB连接上来),再接上USB,然后会出现COM7之类的

3)连接USB线(稳定) 点击v后做此操作
安装友善之臂提供的USB下载驱动
打开dnw配套软件
USB:OK代表成功!!
注意超级终端下载地址:0xc0000000
DNW中USB Port->transmit/restore选中
u-boot_nand-ram128.bin
后面以此类推,k,y!!  kernel是zImage_n43
下载rootfs_qtopia_qt4.img,也就是按y可能有BUG!!
现在保证uboot,kernel下载到开发板上!
然后用nfs的方式去挂载根文件系统(本来也可以下载到开发板的,因为有bug,所以用nfs)
rootfs_qtopia_qt4-20110112.tgz解压
修改/etc/exports
/embedded/rootfs_qtopia_qt4 192.168.1.*(rw,sync,no_root_squash)
service nfs restart
重置开发板(按reset键)
按下q
help
print
set bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.200:/embedded/rootfs_qtopia_qt4 ip=192.168.1.230:192.168.1.200:192.168.1.1:255.255.255.0:mini6410.arm9.net:eth0:off   注意:整个set XXX 必须在一行上
save 记得保存设置的参数

nand flash(总共磁盘大小256M)
0x00000000-0x00080000(bootloader) 2(19) 512k  十六进制 4个0 就是2的16次方乘以8 2的20次方是1M
0x00080000-0x00580000(kernel) 5M
0x00580000-...(rootfs)(x)
service iptables stop
setenforce 0

嵌入式第二天:
1)vmware->fedora9->vmware tools
2)network(linux/windows static config 虚拟网卡也要注意)
3)tftp/nfs server
4)develop application
pc:gedit gcc ./a.out(x86)
embedded:gedit arm-linux-gcc ./a.out(arm)
file a.out
install arm-linux-gcc(crossed compiler)
5)arm board(HyperTerminal)
a)电源线
b)串口线(USB转串口线)
c)网口线(nfs)
d)USB线
启动流程:
bootloader:uboot
kernel:linux os's kernel  操作系统的内核
rootfs:root file system(GUI)
友善之臂:arm11 tiny6410
disk:flash 256M  (闪存)
memory:ram 128M
一切应用软件都是存储于磁盘,运行于内存!
0x00000000~0x00080000-1(512K)put uboot
0x00080000~0x00580000-1(5M)put kernel
0x00580000~0x10000000-1 (remain)put rootfs

开发板能启动系统,有usb线,有dnw
uboot usb download
kernel usb download
rootfs usb download

uboot(usb)
kernel(tftp)
rootfs(nfs)

嵌入式的开发属于交叉开发:

宿主机(程序开发的环境) fedora9
目标机(程序运行的环境) arm11 board

格式化SD卡
将superboot烧写到SD上
将images目录拷贝到SD上

NAND FLASH中格式化(开发板上什么都没有)
SD卡只需要一个Superboot(SD卡启动)

Windows超级终端下:
q
print
set serverip 192.168.1.244
save
tftp c0008000 zImage_n43  把kernel下载到NAND FLASH当中
set bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.244:/embedded/rootfs_qtopia_qt4 ip=192.168.1.230:192.168.1.244:192.168.1.1:255.255.255.0:mini6410.arm9.net:eth0:off
save
bootm c0008000(从虚拟的一个内存启动)

用原来根文件系统
set bootargs root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200

最后print看参数是否真正改过来了

这是修改之前的参数:
bootargs=root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200
bootcmd=nand read.i c0008000 80000 500000;bootm c0008000
bootdelay=1
baudrate=115200
ethaddr=08:90:90:90:90:90
stdin=serial
stdout=serial
stderr=serial
filesize=384d30
fileaddr=C0008000
gatewayip=192.168.1.1
netmask=255.255.255.0
ipaddr=192.168.1.230
serverip=192.168.1.200

set 设置 修改 取消
比如 set serverip 写错,写成 set sip 则会多出一个 sip=XXX
如果想取消刚才敲错的,应该 set sip 后面什么都不带


 附:nfs.txt

console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.217:/nfsroot/rootfs ip=192.168.1.230:192.168.1.217:192.168.1.1:255.255.255.0:mini6410.arm9.net:eth0:off

console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.217:/embedded/fs/rootfs-madplay ip=192.168.1.230:192.168.1.217:192.168.1.1:255.255.255.0:mini6410.arm9.net:eth0:off
console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.217:/test/rootfs_qtopia_qt4 ip=192.168.1.230:192.168.1.217:192.168.1.1:255.255.255.0:mini6410.arm9.net:eth0:off
console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.217:/myrootfs ip=192.168.1.230:192.168.1.217:192.168.1.1:255.255.255.0:mini6410.arm9.net:eth0:off
/project/mp3/fs/rootfs

console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.217:/arm11/rootfs_qtopia_qt4 ip=192.168.1.230:192.168.1.217:192.168.1.1:255.255.255.0:mini6410.arm9.net:eth0:off

setenv bootcmd tftp 50018000 uImage \; bootm 50018000

slab
Slab是Linux操作系统的一种内存分配机制。
alsa Advanced Linux Sound Architecture在2.6系列内核中,ALSA已经成为默认的声音子系统,用来替换2.4系列内核中的OSS(Open Sound System,开放声音系统)。 音频驱动程序框架
checksum bad
full duplex mode
全双工传输(通讯网络允许资料同时作双向传输)
loading: rx fifo error rx length too big DM9000 error: status check fail: 0x3
移植u-boot网络可用(dm9000),显示菜单
如果没有定义CONFIG_DM9000_NO_SROM,则uboot会从eeprom中读mac地址,dm9000是支持eeprom接口的,但友坚开发板上并没有用这个功能,所以需要设置CONFIG_DM9000_NO_SROM。

 

移植Linux内核2.6.36
制作initramfs(注意根文件系统的大小不要超过5M)
内核自启动(注意内核所在的范围)
set bootcmd nand read.i c0008000 80000 500000\;bootm c0008000
擦除flash
nand erase 80000
//下载内核到内存地址为c0008000上
tftp c0008000 uImage
//从内存拷贝到flash上
nand write.i c0008000 80000 500000
//下载文件系统镜像到内存地址为30008000上
tftp c0008000 rootfs.img
//从内存拷贝到flash上
nand write c0008000 580000 800000
//setenv bootcmd nand read.i c0008000 80000 500000\;bootm c0008000
setenv bootargs noinitrd root=/dev/mtdblock2 rootfs=yaffs2 rw rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200

setenv bootargs ubi.mtd=2 root=ubi0: rootfs rootfstype=ubifs console=ttySAC0 init=/linuxrc rw
root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifs init=/linuxrc console=ttySAC0,115200
/linux-2.6.36/arch/arm/mach-s3c64xx/mach-mini6410.c

 

u-boot目录结构
Linux kernel目录结构
rootfs目录结构
mini6410 nandflash 256M block机制 ram 128M内存分配机制

legacy image

WARNING: modpost: Found 1 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
  GEN     .version
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
arm-linux-ld: no machine record defined
arm-linux-ld: no machine record defined
arm-linux-ld: no machine record defined

在 google 查到的都是说arch/arm/kernel/vmlinux.lds的最后两行(如下),给注释起来,但是没说为什么

    ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
    ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined"
后来自己到 arch/arm/kernel/vmlinux.lds 看注释才知道
These must never be empty
If you have to comment these two assert statements out, your
binutils is too old (for other reasons as well)
在编译通过。

 

SPL英文全称是Second Program Loader,“第二次装系统”,就是负责装载操作系统到RAM中。另外SPL还包括许多系统命令,如mtty中使用的命令等。SPL损坏了还可以用烧录器重写。


set bootargs initrd=0xc0508000,0x500000 root=/dev/ram rw console=ttySAC0
set bootcmd tftp c0008000 uImage-ramdisk\;tftp c0508000 ramdisk.gz\;bootm c0008000
zImage go
uImage bootm
make zImage,在arch/arm/boot下生成编译好的可执行程序:zImage  vivi一般采用此类型的内核
make uImage,在arch/arm/boot下生成编译好的可执行程序:UImage  u-boot一般采用此类型的内核


more /proc/mtd
cat /proc/partitions

ov511芯片
ZC301芯片
UVC Camera (1871:0306)
VIDEO_PALETTE_YUV420P
VIDEO_PALETTE_RGB24
ERROR: VIDIOCSPICT,Can't set video_picture format
ERROR:VIDIOCGMBUF,Can't get video_mbuf

set bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.80.128:/embedded/rootfs_qtopia_qt4 ip=192.168.80.129:192.168.80.128:192.168.80.1:255.255.255.0:mini6410.arm9.net:eth0:off

 

参考资料:http://www.arm9.net/