显示如下结果:
arm-elf-gcc -D__KERNEL__ -I/usr/src/uClinux-dist/linux-2.4.x/include -Wall -O2
-fno-strict-aliasing -fno-common -pipe -fno-builtin -D__linux__ -g -DNO_MM -mapcs-32
-march=armv4 -mtune=arm7tdmi -mshort-load-bytes -msoft-float -nostdinc -iwithprefix include -mapcs -c beep.c -o beep.o
arm-elf-ld -m armelf -r -o beep beep.o
make命令是在当前目录下找到Makefile文件,并对Makefile文件的代码进行解析、执行。而Makefile文件就类似于DOS下的批处理文件。如果遇到问题请查看Makefile文件、操作权限等是否正确。
如果一切顺利,那么驱动程序就编译成功了,beep目录下会多出几个文件,用 ls 命令查看:
# ls -l
显示如下:
-rw-r--r-- 1 root root 86762 5月 6 09:35 beep
-rw-r--r-- 1 root root 2891 5月 5 18:12 beep.c
-rw-r--r-- 1 root root 86624 5月 6 09:35 beep.o
-rw-r--r-- 1 root root 547 5月 5 14:35 Makefile
其中beep文件即为可执行文件。后面介绍要加载到模块的文件就是此文件。
三、加载模块到内核
前面已经把驱动程序beep.c编译成可执行文件beep,那么这个beep可执行文件即为要加载的所谓的“模块”。既然模块已经做好,下面的工作就轻松了,加载工作非常简单。加载模块的工作是在目标板上进行的,因为我们所要做的就是为目标板做驱动程序,所要加载的模块是要加载到目标板上的uClinux 内核中。宿主机与目标板上都运行着linux系统,而其用途是不同的,这一点一定要注意,不要混淆。这里再强调一遍:宿主机的Linux系统安装有编译调试工具,为的是编译C语言程序,生成目标文件(.o文件)和可执行文件。而目标板上的uClinux系统是为实际应用所做的系统,它仅仅是为了直接运行宿主机所生成的可执行代码。这样做的目的就是为了节省目标板的硬件开销,或者说是为了完成在目标板上不可能完成的工作,即编译调试程序。
首先运行目标板,成功运行uClinux系统,并成功把宿主机上的/home/armwork目录挂在到目标板的/mnt目录下。这一步的作用前面已经说过,是为了让目标板共享宿主机上的/home/armwork目录,即要想打开宿主机上的/home/armwork目录,只要打开目标板上的/mnt目录就可以了。于是前面所编译生成的beep可执行文件就可以直接通过这个目录获取了。
以下操作都是对目标板进行的,这就需要通过串口的人机终端进行操作。首先连接好串口数据线。若在Windows下,则打开超级终端(开始->所有程序->附件->通讯->超级终端),新建一个超级终端并设置参数使之与目标板相匹配。若在宿主机Linux下,则启动minicom(调整好终端命令行的大小后,输入minicom命令)根据minicom的提示,按CTRL+A,松开后再按Z,进入minicom配置界面,同样要配置成