准备进行Linux设备驱动的开发了


  首先是搭建开发环境,由于目标机是ARM2410,需要用到GCC,在Windows平台虽然有cygwin等工具可以模拟Linux环境,但是据说问题比较多,出了问题也不好解决,干脆还是直接转到Linux平台吧。

  本来一直是用的Vmware装了RedHat9.0,来搭建的交叉编译环境,后来还是感觉是在太慢了,光是编译交叉工具链就要5个小时以上。正好同事中有用了5年Linux的高手,在他的帮助下,一狠心把vmvare卸载了,直接装Linux,用Linux作为主机工作站。

  Linux的发行版选用的Fedora 9,因为界面比较眩,装系统还是挺容易的,只要明白了Linux需要的文件系统,一个2g的swap空间,另外的用ext3格式格好就行了,装好大概40分钟左右。安装完成后还需要升级一些软件,将Winxp的盘映射过来,最后在装上很眩的窗口管理工具和3D特效。

  然后就开始搭建交叉编译工具链了,因为之前在虚拟机上搭建过,所以还是采用一样的方法,通过crosstool这个工具来自动编译,这样就只需要选择好要编译的版本,下载好相应版本的glibc,gcc等等,再修改几个配置文件,然后运行demo_arm9tdmi.sh,就可以泡杯茶,等编译完成了。正常情况下大概要1个小时,前提是下载好相应的库,否则crosstool会自动用wget下载,速度相当慢。但是这次的编译就没有以前在虚拟机上那么顺利了,中途遇到好几次问题,比如环境变量设置有问题,目标目录没有创建的权限等等,还好这些问题根据错误提示来都很好解决,唯一的一个很奇怪的错误是关于gcc版本的,这个我在以前虚拟机上编译的时候从来没有遇到过。后来google了一下,终于发现是我装的fedora 9用的gcc版本太新了,于是在网上下载了一个gcc3.4.6来安装,重新编译。结果还是出错,根据程序的调试信息,发现在运行脚本的时候又自动改为选用本机原来的gcc了。最后找到出错的地方,将crosstool.sh里面CC=gcc改为CC=gcc34才解决问题。

  接下来该学习写makefile和编译移植内核了,毕竟现在才刚起步,要学习的东西还非常多。争取把遇到的问题和解决办法都写下来,一是怕自己忘记,二也可以帮助其他新手走弯路。Linux博大精深,需要大家共同学习才能进步的更快。

相关内容