NXP

LPC3250环境搭建的总结

2019-07-12 12:12发布

      这一周的任务主要任务是搭建LPC3250的系统平台,以及在主机上进行相关环境的搭建,最后是将交叉编译好的内核模块加载到板子中。在整个平台搭建过程中遇到了很多的问题,第一是笔记本没有串口,另外WIN 7系统对相关工具的不兼容,对此我采用安装WIN 7下的XP Mode(XP模式)。对于整个环境搭建的详细步骤我就不想多说了,大致的环节也就是交叉编译工具的安装、内核的编译和配置、串口通信和调试的工具安装、tftp服务器的安装、NFS服务器的安装、以及相关文件的烧写,相信大家跟着实验指导上的步骤一步步来的话就会成功。我把我对整个过程以及结合这些天看的资料谈谈我的理解。       对于实验指导中的Bootloader的概念我觉得书中叙述的前后存在矛盾,容易让人误解,我查了相关的资料,Bootloader应该包括kickstart和stage 1和u-boot,第0扇区和第1扇区镜像可以看作是第一部分,其实现的功能大致有初始化CPU、堆栈、以及存储器系统,其功能类似于PC中的BIOS,而第二部分的u-boot的功能则是完成硬件启动到软件启动的过渡,它所实现的过程比较复杂,一般我们把它分为两个阶段,第一阶段有设置CPU的时钟和速率,设置堆栈,初始化内存,为ROM到RAM的搬移作准备,最后跳到C代码,第二阶段则是一系列函数的初始化,初始化闪存设备,初始化内存分配函数、初始化NAND Flash设备、显示设备、网络设备等,最终引导操作系统。另外一个问题是对于设置u-boot自启动参数的问题,NAND Flash只有256M,地址最大到10000000,而aboot时对应的地址却是0x83fc0000,u-boot明明是固化在NAND中的,这个地址所对应的是哪?问了好多人也没有解决这个问题。固化好u-boot复位后,有时会出现Warning警告,这是因为uboot的环境变量没有保存,可以用saveenv命令来保存。对于环境变量,我们可以在编译和制作u-boot镜像时修改include/config目录下的相关文件来改变环境变量,这些又涉及到u-boot的编译,对内核进行编译并制作内核镜像时我们也会涉及到u-boot的相关工具,也就是mkimage工具,这个工具可以制作uImage镜像(u-boot格式的文件),制作镜像时我们务必要将这个工具复制到/usr/bin目录下。实验指导中还存在问题的地方是在固化安全文件系统时,将安全文件系统的镜像写入NAND中却没有保存环境变量,这会直接导致启动板子时加载到安全文件系统时则会卡住不动,这就让我们想到每完成一步写入操作时是否有真的写入或者是保存环境变量,对应的命令有S1L下的nsave命令(真正的写入NAND命令)、aboot阶段的saveenv(保存环境变量)、u-boot下的固化内核阶段的setenv命令(设置环境变量)、以及固化安全文件系统时的saveenv。       在我们安装交叉编译工具时我们只要按说明一步步做基本上都是能成功的,需要注意的是我们安装交叉编译是为了在主机上编译板子上适用的可执行程序,所以我们还有相应开发板上的内核源码,并进行编译配置它,在解压内核源码时需要有tar命令来解压,我直接解压过,提示有一大堆文件要替换,所以我们还是老老实实用tar –jxvf命令来解压它吧,编译则首先采用smartarm3250_defconfig来默认配置一下,再make一下。交叉工具链的安装则涉及到RPM包的安装,这一周我也普及了相关包的知识,对于-ivh参数分别对应的是安装、检验包的依赖是否完整、显示进度参数,交叉工具链会被安装到/opt/nxp目录下,我们想要系统能找到这个目录下的编译工具的话,还要在主目录下编一个配置文件.bash_profile来完成路径的追加,专业点讲这就是环境变量(PATH)的追加赋值,$HOME是引用变量,”:”是变量分隔符,我们每次想交叉编译时都要运行这个文件,运行方法是. .bash_profile,我们也可以修改/etc/profile文件来直接将目录追加给PATH变量,以供所有用户使用,但对$HOME/bin我就有点不明白了,HOME下根本就没有bin这个目录,那为什么要把这个路径也追加给PATH呢?我们可以输入arm-vfp-linux-gnu-来查看交叉编译器是否正确安装了。       在安装tftp服务器时,我配置了tftp服务器文件把服务器路径改成自定义后,重新加载并重启了tftp服务器,并将目录的权限设成777,但在测试时却一直会提示错误:文件找不到,但我看目录下却已经获取了相关的文件,百思不得其解,上网查了也找不到解答。另一点需要注意的就是防火墙的问题,我们可以直接将防火墙卸载,也可以关闭,但我输入sudo setup却并没有出来配置界面,也不知道为什么。安装NFS同样比较容易,只是在当板子烧好,环境搭建好后,挂载却不成功,但ping却可以通,在使用ping命令时挺尴尬的,直接ping IP没加任何参数,导致无法终止,按了CTRL+C也不行,我只能关闭终端了,通过mimicom连接后依然还在ping,差点彻底崩溃了,在一直ping的过程中我学了相关参数的用法,才知道要加-c来指定发几次包,最后是按CTRL+Z来暂停的。在配置加共享目录时出现了问题,我直接照上面的格式在#后加了目录,导致怎么都挂载不上,后来另起一行加了共享目录和访问设置重启NFS后终于可以挂载上了。       当主机的环境都搭建好后,我们可以通过tftp来传送内核镜像、安全文件系统镜像了,不过要记得烧到板子里就行,别忘了配置或保存环境变量就行,最后是通过SD卡来安装要文件系统。当一切准备就绪后我们就可以通过NFS服务器来共享文件了,只需要mount一下就行了。          最后是交叉编译和加载模块的工作,对于LED驱动的源文件我只想说商家也太不负责任了,头文件的路径也错的太厉害了,但却没有指出来,害的我在编译时怎么编都是一大堆错误,向李宁和王泽宇同学求助后找了半天才找到两个目录下的相关头文件,最终终于交叉编译成功了,并加载到板子上,一切终于大功告成了。不过对于源文件的整个结构还缺乏较深入的理解,也只是看了相关读、写、控制函数的实现,其他的结构与字符设备那一章基本相似,这些还有待加强。       国庆这几天比较大的收获就是在操作完之后看了实验指导的前半部分内容,对LPC3250的软硬件都有了比较全面的了解,为此我把板子拿过来对照它的功能部件来一一对照,对板子的构造以及有哪些接口也大致有了了解。