当然,本人已经不是电子控制器开发的新手了。从事单片机,DSP开发十多年,但是一直没有接触过,并开始在linux上进行工作。到现在差不多1年半,现在将这个过程重新整理出来,和大家一起分享,同时也给自己留一个记录。
“嵌入式linux新手入门手记”会是一个系列,记录我从第一次正式开始在linux平台工作,到完成项目的过程中各问题的解决过程。当然,作为工作经历的记录,这个手记的系列不讨论理论方面的知识,只是忠实的记录问题,以及问题的解决过程和方法。
首先在这里介绍一下我的开发平台:TI的AM335x的平台,硬件已经调试完成,在本手记中将不进行硬件方面的记录。主要需要的功能是:USB接口单点触摸屏,1024*768 TFT-LCD显示,GUI的用户程序实现人机交互,100M以太网,不需要3D以及图形加速,256M DDR2,256M nand,一个SD卡槽,一个RS232接口。
首先,要进行嵌入式linux开发,当然需要搭建计算机的工作平台,考虑工作的方便和效率,决定在计算机上安装独立linux系统,和window做成双引导。
2010年时用过一段时间的ubuntu,所以决定还是使用ubuntu,在ubuntu的官网上下载32位版本的14.04(64位的系统驱动程序比较难找)。使用ubuntu推荐的Universal-USB-Installer-1.9.5.9工具,将ubuntu的安装镜像写入到一个标准的4GU盘上(标准的意思是指不要有乱七八糟的功能,可能会导致兼容性问题而无法启动ubuntu安装程序。写入时会导致U盘的内容全部丢失,需要先备份U盘的文件)。
在windows7的计算机管理中启动磁盘管理器,我的计算机硬盘是500G的,分为2个分区,并格式化为2个磁盘:C(190G)和D(其余空间),在磁盘管理器中对D分区进行压缩,压缩出100G的磁盘空间出来,对这个压缩出来的100G空间不要做其他处理,退出磁盘管理器。
重新启动计算机并进入到BIOS中设置启动顺序,使计算机能够从U盘启动。使用制作好的Ubuntu安装U盘启动计算机后,将进入到ubuntu的体验系统中,选择安装,然后根据安装的提示进行,这里需要注意2点,一是语言的选择,最好在安装时选择中文,这样避免后续设置ubuntu时显示、输入法等的问题。二是最好不要手动指定安装分区,有ubuntu安装程序自动对之前划分出来的100G空间进行管理,我的计算机安装有6G的内存,所以安装程序将100G空间划分为一个6G的交换分区,其他用于安装ubuntu。然后ubunut会询问是否和其他操作系统共存时,一定要选择和其他操作系统共存,否则会导致安装完ubuntu后无法启动windows的问题。
在安装完成后,需要对ubuntu进行一些设置,这里就不再过多描述,下面仅对一些和后续嵌入式linux开发有关的进行说明:
另外,我使用的shell是bash,而ubuntu14.04安装后默认用的是dash,需要修改为默认使用bash。
1、安装tftp服务。嵌入式linux开发,尤其是uboot和kernel相关的开发,需要不断的修改MLO,u-boot,uImage等,这些文件是需要写入到am335x的板载flash上的,如果每次都是用SD,CCS,烧写工具等,是一个很麻烦的事情。由于uboot支持tftp下载文件并烧写flash,这是一个较为便捷的方式。
2、安装nfs服务。nfs服务是嵌入式linux开发一个非常重要的服务,使用这个服务,可以将计算机上的一个文件目录挂载为am335x运行时的根文件系统,这样避免不断烧写flash。
为安装nfs服务,修改ubuntu的软件源,如果不是“main server”,修改为“main server”,然后点击close,弹出对话框点击reload,然后等待处理结束;
3、设置计算机的网卡。为开发嵌入式linux,我的计算机安装了2个网卡,一个USB接口的无线网卡,用于上网。另外一个100M PCI接口的有线以太网卡,用于连接am335x。将有线以太网卡的IP地址设置为固定:192.168.1.50,子网掩码255.255.255.0,其他可以不设置。
编辑~/.bashrc文件,将编译uboot和kernel需要的环境变量加入到文件中,并使生效。 下面是需要加入到~/.bashrc中的内容:
编译uboot时会生成用于制作kernel的image的工具,这些工具在编译kernel是被make调用,所以在编译kernel时,必须保证之前已经正确编译或uboot,并且没有对uboot执行过clean。
上述执行的命令,使用arm-linux-gnueabihf交叉编译器,arm体系的CPU,输出文件保存到./am335x目录,执行distclean清除所以之前的临时文件。
上述执行编译uboot,其中-j4告诉编译器使用4线程进行编译,这个设置取决于计算机CPU的核心数,能够加快编译的过程。
ARCH=arm指定目标CPU的体系架构。O=am335x指定文件输出目录为./am335x,编译结束后,能够在这个目录下找到MLO,u-boot.img等文件。
编译uboot将会生成2个重要文件,MLO和u-boot.img。其中MLO是第二次引导程序,am335x复位后,内部otp中的引导程序会启动,然后根据LCD_DATA管脚的设置来加载指定存储器上的MLO。
9、开发嵌入式linux,需要将am335x通过串口和计算机连接,并使用计算机的超级终端 进行操作。ubuntu下的minicom比较好用。
现在的计算机一般都没有标准的RS232接口,我自己设计了一块CH340T的通信转接板,一端连接am335x的UART0,另外一端接计算机的USB口,在芯恒的官网能够下载到ubuntu的驱动程序,下载下来后insmod成功后,/dev下能够看到ttyUSBX(X取决于计算机,一般为ttyUSB0)。

