HI3518EV200烧录uboot、kernel、部署文件系统

1.如果没有uboot,那么我们要使用HITool来下载uboot,运行Hitool前先安装jre-6u45-windows-i586,烧录截图如下:
HI3518EV200烧录uboot、kernel、部署文件系统_第1张图片
2.烧完uboot之后,嵌入式系统为了简化,没有使用分区表来自动管理flash,所有都是事先定死的,所以在部署一个嵌入式系统前都要人为的定下一个分区,原则为:
1. 每个分区要足够放镜像;
2. 尽量留一点扩展余地;
3. 在满足前面两条的情况下你随便搞。
(6)我定的分区:
分区名 分区大小 起始地址 截止地址
bootloader 1M 0X00000000 0x00100000 (1024*1024)B
kernel: 3M 0X00100000 0X00400000
rootfs 12M 0X00400000 0X01000000


3.烧录kernel及rootfs,查看手册得到:3518EV200 DDR2地址范围为 80000000-83FFFFFF,
烧录命令:
tftp更新并重新烧写uboot的命令序列:
//向内存0x82000000写入数据,b代表8bit,就是写一个字节,所以这里是从0x82000000开始,每一个字节写ff,0x100000代表count,所以这里是0x100000个count,也就是0x100000个字节//
mw.b 0x82000000 ff 0x100000

//从tftp服务器上下载名为u-boot-hi3518ev200.bin的文件,下载到0x82000000 地址处//
tftp 0x82000000 u-boot-hi3518ev200.bin

//uboot中如果支持spi/qspi flash, 那么可以使用sf的erase, read, write命令操作spi flash,sf probe代表的是选中第几个spi flash,这里是选中的第0个//
sf probe 0

//擦除flash上偏移为0x0地址开始到0x100000之前的块,擦除操作是以erase block为单位的, 要求offset和len参数必须是erase block对齐的//
sf erase 0x0 0x100000

把内存0x8200 0000处的数据, 写入flash的偏移0x0, 写入数据长度为 0x100000(1MB), 操作偏移和长度最小单位是Byte
sf write 0x82000000 0x0 0x100000


tftp更新并重新烧写kernel的命令序列:
mw.b 0x82000000 ff 0x300000
tftp 0x82000000 uImage_hi3518ev200
sf probe 0
sf erase 0x100000 0x300000
sf write 0x82000000 0x100000 0x300000


tftp更新并重新烧写rootfs的命令序列:
mw.b 0x82000000 ff 0xc00000
tftp 0x82000000 rootfs_hi3518ev200_64k.jffs2
sf probe 0
sf erase 0x400000 0xc00000
sf write 0x82000000 0x400000 0xc00000


bootcmd和bootargs对应的设置命令
bootcmd 是uboot完成命令行计数之后,要去执行的命令,这里命令的意思是:先选中spi flash 0, 然后读flash的偏移为0x100000 -0x300000的数据放到内存0x82000000上去,然后跳到0x82000000去启动内核,0x100000-0x300000存放的就是linux内核的分区
1.set bootcmd ‘sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000’

2.set bootargs mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)
mem:指定内存的大小,不是必须的
console:使用串口ttyAMA0,波特率115200
root:用来指定rootfs(文件系统)的位置
rootfstype:指定文件系统的类型的


linux系统启动起来之后,做了什么?
1.执行的第一个文件是rcS,依次执行S00到S99之间所有的文件
2.首先执行:S00,生成设备节点
S00devs文件内容如下:创建设备节点
#!/bin/sh
mknod /dev/console c 5 1
mknod /dev/ttyAMA0 c 204 64
mknod /dev/ttyAMA1 c 204 65
mknod /dev/ttyS000 c 204 64
mknod /dev/null c 1 3
注意:其实我们在做文件系统的时候已经做了console、ttyAMA0、null打印就会提示文件已经存在
mknod: /dev/console: File exists
mknod: /dev/ttyAMA0: File exists
mknod: /dev/null: File exists
3.S01:
#!/bin/sh
mkdir /dev/pts
mount -t devpts devpts /dev/pts
mkdir -p /dev/.udev
udevd --daemon #udevd是一个应用程序,–daemon 就是创建那个守护进程,进程创建后内核就可以检测
#为了检测即插即拔的设备
udevadm trigger
4.S80:配置和网络相关的,注意对网络的配置要在:
[ -z “$ipaddr” ] && exit 0 之前
5.S90hibernate 好像是电源管理相关的


MPP部分:
1.我们把mpp下的ko和lib拷到板子里面去,lib下面的类型可以放到/usr/lib下面
2.执行load ko的脚本:
./load3518e -i -sensor ar0130 -osmem 32 -total 64


编译hisi的sample
1./mpp/sample/Makefile.param ,选中如下:
CHIP_ID ?= CHIP_HI3518E_V200
SENSOR_TYPE ?= APTINA_AR0130_DC_720P_30FPS
2. 进入/mpp/sample/venc下面make,放到板子上去运行,
./sampe_venc 0 选择第一种模式,
c 选择第一种码流模式
按两次回车,停止录像,在当前目录下得到三段h.264视频,分别对应1、2、3通道视频,内容一样,分辨率不一样。


把ko lib提前部署到根文件系统里面
1.在osdrv/pub目录下解压rootfs_uclibc.tgz,得到目录rootfs_uclibc,进入目录rootfs_uclibc,提前把/mpp下的ko及/mpp/lib下的库复制到rootfs_uclibc合适位置
2.手工制作rootfs
进到Hi3518E_SDK_V1.0.3.0目录下执行
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o osdrv/pub/rootfs_uclibc_64k.jffs2 注意:这里SPI block大小为64KB,block大小在uboot开始几行打印出来
则在/osdrv/pub下生成rootfs_uclibc_64k.jffs2文件,然后烧录即可。
3.其余的就和上面一样去操作

你可能感兴趣的:(IPC-HI3518EV200)