xunwei笔记2---基本概念和环境

UBOOT初探:
BOOTLOADER是个大的裸机程序。uboot 和Linux内核不一样,他没有多任务调度的代码,虽然可以挂接文件系统,也可以有网络协议栈。uboot最初执行的是汇编,集中在那三个汇编文件当中,然后就是C代码了。
有个文件夹叫做‘NET’,里面就是TCP/IP网络协议栈,网络协议的源代码都在里面了。
三个重点目录:'board'的目录,'cpu'的目录,'drivers'的目录。
内核启动以后,uboot就没什么事了,完成任务靠边站了。
u-boot.lds,这个文件很重要,这个文件就是:编译连接脚本。用来描述输出文件的内存布局。这个文件,你平时看不到,在CPU/A9目录下。在编译以后,根目录里也会出现!
打开u-boot.lds文件看一看,uboot先执行什么,在哪个文件里执行。
注意start.o是源文件start.s生成的。打开start.s这个文件,看到都是汇编语言。在uboot最开始执行的代码,就是用汇编语言来写的。
我们学习ARM+Linux系统,其实不用深入学习ARM的汇编语言,了解一下就可以了。
ARM的每条指令是对齐的,都是占用4个字节。
把另外两个文件打开:cpu/arm_cortexa9/s5pc210/cpu_init.s及board/samsung/smdkc210/lowlevel_init.s,主要也就这三个汇编程序。
cpu_init.s 这个文件里的汇编,主要功能就是初始化DDR内存,也就是设置DDR的参数,让DDR3能工作起来。如果我们换了一种内存颗粒,可以修改这里面的代码。
最后通过ldr pc, _start_armboot指令,把函数start_armboot的地址,赋值给pc指针,这样,下一个指令就从start_armboot函数开始执行了,而start_armboot这个函数是个C函数,它在文件 lib_arm/board.c中,这样,就完成了从执行汇编语句到执行C语言语句的转变。
uboot 还有个功能就是传递参数给Linux,也就是cmd_line。
=========================================================
澄清几个基本概念:
Linux这个操作系统,必须要挂一个文件系统!有些操作系统,比如Vxworks就不需要,uCos也不需要。
Linux是在运行的最后才挂载文件系统!Linux启动到最后,等所有驱动初始化完成以后,最后一步才挂载文件系统。
挂载ramdisk-uboot.img和system.img文件系统,也就是安卓。其中ramdisk-uboot.img是启动各种安卓服务的脚本。
QT和Android系统一样,其实都算是个文件系统,而QT和Android的底层都是 Linux内核,也就是那个zImage文件。
ubuntu也是这样,也只是linux内核起来以后挂载的一个文件系统!
UBOOT检测内存,存储等设备,并且设置处理器等设备的时钟等等。uboot到最后开始引导内核,也就是把zImage 那个文件拷贝到内存,并去运行。
内核不断的打印出各种外部设备的信息,对各种外设进行驱动初始化。最后挂载文件系统。不仅仅是挂载,还要执行文件系统里的应用程序!实际上,你真的可以把Android看做Linux上面跑的一个应用程序!
那个内核,zImage ,所有的驱动都在里面!
迅为提供的资料已经足够用了,不要再找资料了,找的越多越难入门。
==========================================================
4412启动流程:
ARM9,ARM11,A8,A9属于微处理器,也就是MPU;
与MCU区别不仅仅是速度,MPU多了两个部件:CACHE和MMU;处理器速度相对于内存速度,差距太大,所以就引入了CACHE;
ARM里面,启动MMU以后,我们编程看到的地址都是虚拟地址,经过MMU以后才是具体的物理地址;
4412包括以前的2440,6410,在上电以后,MMU是关闭的,也就是说这个时候其实和单片机差不多;但是,在Linux启动以后,操作系统就会把MMU打开;
上电后,从0地址开始执行,0地址就是IROM,也就是一段程序,是芯片自带的,三星写的,源码谁也拿不到;
4412可以从TF卡启动,也可以从EMMC启动,还可以从USB启动,这都是IROM程序决定的;
iROM执行以后,会到外部找程序,找到以后,要拷贝8K的程序到内部RAM,这8K的程序就是 BL1;uboot在编译完成后,把BL1和自己拼接到了一起;这个BL1由三星提供文件,是加密的;BL1是根据各个厂家的公钥,根据RSA算法弄的;
uboot的编译:build_uboot.sh脚本,就是把几个文件拼接一下,生成最终的 u-boot-iTOP-4412.bin;
启动过程:iROM-->BL1--->BL2(16K)---->uboot---->zImage---->挂接文件系统;
===========================================================
BL1与BL2:
BL2可看到源码。
BL1在IRAM运行。IRAM总共才256K。
BL1老版本是8K,新的已经是15K啦。
BL2也是要在IRAM里运行的!BL1并没有初始化DDR3.
加载BL1的时候,要对BL1进行多种安全检验,然后BL1会对BL2进行各种检验。BL1主要作用是出于安全考虑。
BL2大约14K,补齐到16K。uboot也要做补齐的,就是补齐到328K。
我们自己的BL1和BL2是没有经过secure boot的,但是BL1本身还是安全的,三星提供的,不过BL1不再对BL2进行secure认证了。BL1本身是经过IROM的所有安全认证的。
BL1的程序可以自己搞,然后经过算法加密就行了
============================================================
LINUX驱动初探:
Linux把所有的设备都看成文件。
驱动分类:字符、网络和块设备。
对于文件的操作一般有几个函数:open(),read(),write(),ioctl(),close();
ioctl(), 比如我想从文件中间读数据,就要用这个函数把读取的指针指定到文件的中间。
做驱动,尤其是字符类驱动,就是做好open(),write(),ioctrl()等几个函数,然后等着上层去调用!
在Linux文件系统里面,肯定会有个目录叫做/dev,这个目录里的所有文件是设备文件(或者叫做设备节点),所有的设备,只要是做好了驱动,都要在这个目录里生成一个文件!
我们对LED操作,那就要用 open这个函数打开设备文件 /dev/leds;系统提供的open等函数,最终要找到对应的驱动程序里的open来执行!
设备文件(节点),它就是应用程序和驱动程序之间的桥梁!设备文件里面什么也没有,但包含了两个信息:主设备号 和 次设备号;
主设备号用来区分不同种类的设备,次设备号区分同类设备里的不同的硬件;
做完那几个函数以后,必须注册到系统!通过register_chrdev()函数注册。
实际驱动程序中名字会有变化,比如led_open(),led_read()等,而这几个函数将来会被上层应用程序使用Linux系统函数open()等来间接调用!实际上也可以认为驱动程序就是底层提供的函数库。
=============================================================
使用FASTBOOT烧写安卓和通过SD卡烧写LINUX-QT:(LINUX-QT也是一个运行在开发板上的操作系统,比较简陋,内含基本的工具软件)
011---EMMC启动;100--SD卡启动;靠近网口端为0;
FASTBOOT烧写:串口,USB-OTG;Win7或者XP系统;fastboot软件工具;USB驱动,也是OTG线连接手机需要的驱动(豌豆荚或者360手机助手);超级终端串口软件;
FASTBOOT操作步骤:(使用emmc)
1)准备好4个安卓镜像文件,即UBOOT文件,内核文件,两个文件系统文件;(复制到fastboot软件工具的\USB_fastboot_tool\ platform-tools文件夹中)
2)打开超级终端,默认波特率115200;
3)启动开发板,串口进入倒计时,输入任意字符,进入u-boot模式;
4)创建EMMC分区,命令:fdisk -c 0;(格式化不会影响uboot和内核文件,只销毁文件系统;此格式化按照默认空间大小分区:uboot+内核=5M;安卓文件系统300M;Data和Cache文件为1G;临时文件为300M;如果想更改Linux内核镜像文件区域的大小,只能更改u-boot文件,迅为提供源码;例如fdisk -c 0 500 1026 600 可以将EMMC分为Android镜像500M(第2号盘符)、Data和Cache文件夹为1026M(第3号盘符)、临时文件为600M (第4号盘符),第1号盘符是用户区)
5)格式化eMMC分区,命令fatformat mmc 0:1,0代表emmc,1代表盘符,将用户区改为fat格式;2,3,4盘符都是如下格式化:ext3format mmc 0:X,X依次为2,3,4;
6)连接开发板和PC的USB_fastboot_tool工具,串口中输入命令 :fastboot;(进入FASTBOOT状态)
7)打开\USB_fastboot_tool\ platform-tools文件夹中的cmd.exe,
分别输入4种命令:fastboot.exe flash bootloader u-boot-iTOP-4412.bin(新手不要执行此条),
fastboot.exe flash kernel zImage,
fastboot.exe flash ramdisk ramdisk-uboot.img,
fastboot.exe flash system system.img;
8)在cmd.exe中执行fastboot -w命令,擦除用户区数据;
9)在cmd.exe中执行fastboot reboot 命令,重启开发板;
制作可以烧写的TF卡(将uboot写入TF卡):
1)在WIN7下使用格式化软件工具,将TF卡格式化(FAT32);
2)将TF卡插入开发板,使用EMMC启动UBOOT程序,将TF卡分区和格式化;
输入命令:fdisk -c 1;
fatformat mmc 1:1;
ext3format mmc 1:2;
ext3format mmc 1:3;
ext3format mmc 1:4;
3)将TF卡连接至UBUNTU系统,使用df -l命令查看盘符(是sdb还是sdc之类),ubuntu系统盘符是sda。
4)在UBUNTU系统中登录root权限账户,进入uboot.bin所在的目录,执行命令./mkuboot /dev/sdb,将uboot程序写入TF卡。制作完毕后,TF卡可见空间会减少。
5)如果是2GB的TF卡,第一条命令改为:fdisk -c 1 300 300 300;适当分配空间。
6)验证TF卡是否制作成功。可改变拨码开关,通过TF卡启动进入UBOOT。
使用TF卡烧写LINUX-QT系统文件:(安卓与其过程相同,UBUNTU不同)
1)在WIN7下,在TF卡建立sdupdate文件夹(名称固定),将4个镜像文件复制到该文件夹;
2)将TF卡插入开发板,使用emmc启动,进入uboot程序,在串口终端输入命令:sdfuse flashall;
或者分别执行如下命令:
sdfuse flash bootloader u-boot-iTOP-4412.bin(新手不要烧写执行这一步,会更新emmc的uboot)
sdfuse flash kernel zImagesdfuse flash ramdisk ramdisk-uboot.img
sdfuse flash system system.img
上述命令将系统文件写入了EMMC。
3)等待更新完成,输入reset命令,重启系统。
如果emmc的uboot坏了,也没有制作好的TF卡:
1)购买TF卡,在WIN7下使用格式化软件工具,将TF卡格式化(FAT32);
2)将TF卡连接至UBUNTU系统,烧写uboot程序至TF卡;(参考前面所述)
3)使用TF卡启动,进入UBOOT程序,执行分区及格式化命令:fdisk -c 1等等;(参考前面所述)
4)在WIN7下,在TF卡建立sdupdate文件夹(名称固定),将uboot.bin文件复制到该文件夹,使用sdfuse flash bootloader u-boot-iTOP-4412.bin命令,将UBOOT刷新到emmc;
注意:uboot启动后,程序在内存里运行,所以可以回头修改emmc和TF卡的uboot文件;
不同尺寸的屏幕,提供了不同的内核镜像文件zImage,只需刷入相应内核文件即可。
======================================================
将UBUNTU系统烧写到开发板:(始终通过EMMC启动)
1)制作一个TF卡,插入开发板,在UBOOT程序下先分区格式化,然后在UBUNTU系统下将所有镜像文件复制进去(文件系统要解压到TF卡的1.7G分区,其它在WINDOWS下复制到sdupdate文件夹);(该TF卡必须是2GB容量,否则会出问题)
2)启动开发板,进入UBOOT,将EMMC分区和格式化,然后将TF卡中的uboot和zImage_sd文件刷新到EMMC指定分区,使EMMC可以从TF卡寻找文件系统,从而启动UBUNTU系统;
3)执行reset命令重启开发板,进入UBUNTU系统,将U盘中的UBUNTU文件系统解压到EMMC的指定分区;(必须是通过USB接口,U盘可以是更大容量的TF卡,U盘中是文件系统的压缩包)
4)重启开发板,进入uboot,将zImage文件刷新至EMMC,然后reset命令重启。此后EMMC将从自己寻找UBUNTU系统文件,不再从TF卡寻找。
注意:U盘在UBUNTU中的盘符通过df -l查看,一般是sda*名称。emmc的盘符名称是mmcblk0**;其它分区和格式化命令参考前述。
======================================================
虚拟机安装及SSH软件及ROOT权限及VI编辑器:
1)虚拟机(VMware workstation)版本要高于8.0.3,不能太高,会出问题;
2)ubuntu镜像版本12.0.4;
3)在网盘下载虚拟机,自己在网上找cdk破解一下;试用版一个月;
4)在开发板使用说明书中有安装虚拟机和加载镜像的说明;
5)在群里下载《华为内部linux教程》,有命令讲解。
6)打开ubuntu命令窗口:Ctrl + Alt + T 快捷键;
7)在虚拟机里面配置网络连接,分为固定IP和动态IP两种情况;使用ifconfig命令查看ubuntu的ip;配置完毕后可在win7命令窗口下ping ubuntu的ip查看连通性;
8)ssh软件:在win7下和ubuntu下都要安装,在win7下的ssh中配置ubuntu的ip地址和root登录用户,详细使用以后在实验中讲解;
9)root用户:使用topeet登录;
10)VI编辑器:使用时再讲解;
注意:不要随意升级虚拟机软件,ubuntu有安装好SSH软件的镜像;
===================================
使用虚拟机加载ubuntu系统:(已经安装好各种软件)
1)下载并解压ubuntu系统文件夹;(路径:iTOP-4412开发板搭建编译环境所需要的工具包以及补丁包”→“02-Ubuntu系统安装包”→“02-搭建好开发环境的Ubuntu虚拟机镜像V2.0)
2)使用vmware虚拟机打开其中的*.vmx文件;
3)点击“开启此虚拟机”;
4)不要升级ubuntu,显卡可能不兼容;
5)不要直接关闭虚拟机窗口,要先在ubuntu中关机;
6)默认密码topeet;
===================================
使用虚拟机安装ubuntu原始系统:(没有安装各种软件)
1)使用虚拟机新建选项,加载ubuntu的iso文件;
2)硬盘分配40GB;(安卓4.0.3要100GB,安卓4.4要150GB到200GB)
3)两个密码设成一样的,避免遗忘;
4)应该联网,且网速要好,这样安装会快;
=================================
虚拟机网络设置:
1)桥接模式;---适用于动态IP;
2)仅主机模式;---不能上网,只能与PC通信;
3)自定义模式,VMNET8(NAT);---适用于固定IP;
==================================
底板设计:
1)需要给核心板供电4.2V,即VSYS_K;
2)USB差分对阻抗90欧,单端42--78欧;
3)HDMI,LVDS差分对阻抗100欧,单端50欧;
4)WIFI天线是50欧阻抗匹配;
5)TF卡的时钟信号要做包地处理;
6)RGB信号要和转LVDS信号的芯片距离较近;
7)所有差分对一同走线;
8)电源线远离单根高速信号线;
9)PCB厂的水平:要求能做6mil线宽,5mil的间距;
10)不做自动贴片焊接,可用沉金。
11)WIFI模块的PCB中有天线的做法。---使用CADANCE。
===================================
不同的LCD接口:
1)ARM自带的是RGB和MIPI接口;
2)9.7寸所需的LVDS通过RGB转接而来,转换芯片型号SN75LVDS83B;
3)MIPI接口的屏幕要求精准配置,否则不亮,厂家一般会给出配置参数和注意事项;

posted @ 2021-12-11 16:38  随风而释  阅读(124)  评论(0)    收藏  举报