平台:虚拟机Ubuntu 12.04 内核:linux-2.6.30 开发板:TQ2440
包括编译内核、制作文件系统,到目前可以在虚拟机上可以通过交叉网线可以和开发板互通,用了弄了差不多快两天时间吧。现在回想起来觉得本来很容易的事,却拉了这么长时间,很小的一个错误,本来可以在编译错误时,迅速定位到错误位置,但本人算是个菜鸟,再者在网卡驱动移植时,tq2440的说明修改代码的位置很是模糊,加上对代码的含义不甚了解,就浪费了好多时间。所以把我惨痛的经历写下来与诸君共享之……
首先,至于说怎么从网上下载linux内核源码,制作文件系统,tq2440的资料上说的很清了,网上也一搜就好多,我就不说了,重点说说网卡的移植。
天嵌以2.6.25和2.6.30.4版本的内核为例说linux网卡的移植,我用的是2.6.30版本的,我不知道他和2.6.30.4到底有多大区别,在移植步骤中,移植手册不断的说明要往dm9000.c哪行添加代码,也不说清这些行是以修改前为准,还是以前面修改后的行为准,代码位置也不敢随便加。在这个过程中纠结了好久好久。直到看到点击打开链接此篇博客,他把需要添加定义的宏,全部放到dm9000_init(void)中去,就是在加载模块时,就执行这些宏,不过,要说明的是,在移植手册中,一共需要在不同的地方定义oldval_bwscon、oldval_bankcon4 、S3C2410_BWSCON、S3C2410_BANKCON4,并且,后两个变量在不同的地方定义了两次,可能是需要程序选择执行,但是在dm9000_init(void)中只需要用一次即可,否则,会出现矛盾,虽然它也能编译过(我都编译通过了,把内核下载到板子上就启动不起来,后来检查代码是才发现定义的六个变量有两个是两两重复的。删除一对后,就可以通过了)。后续工作移植手册都说的很详细,不再细表!
剩下的工作就是ubuntu和板子的通信了,下面一篇文章说的很好,贴过来:
一:安装 NFS 服务器
sudo apt-get install nfs-kernel-server
二:配置该服务器
sudo vi /etc/exports
在打开的空的文件中,添加想要共享的目录
/opt/FL2440 *(rw,sync,no_root_squash)
这里 /opt/FL2440 是 ubuntu 给其他平台 ( 开发板,其他远程终端等 ) 提供的共享目录; * 表示所有客户机都可以挂载上述共享目录, rw 表示挂接此目录的客户机对该目录有读写的权力, no_root_squash 表示允许挂接此目录的客户机享有该主机的root 身份。
三:启动 NFS 服务
sudo /etc/init.d/nfs-kernel-server start
然后,在开发板上做如下设置:
四:打开超级终端或者 DNW ,保持串口处于通信状态
五:通过交叉网线连接 PC 和开发板。这一步千万不能忘, NFS 靠的就是这根线啊,线路都不通了,如何能够配置成功?
六:确保 ubuntu 下的 IP 地址与开发板的 IP 地址在同一网段。二者皆可以通过ifconfig 查询,以及通过它设置 IP 地址。如果不在同一网段,请手动设置为同一网段。
以上六步已经配置好 NFS 了,下面具体测试是否通信正常:
七:在开发板的 linux 启动后的命令行里输入如下指令:
mount –t nfs –o nolock 192.168.1.168:/work/nfs_root /mnt
其中 192.168.1.103 为 PC 端 ubuntu 的 IP 地址。我这里本身开发板的 IP 地址不在这一网段,通过如下命令:
ifconfig eth0 192.168.1.101
这时,开发板的 IP 就设置成 192.168.1.101 了。前面的挂载命令将会把 PC 端的ubuntu 下的 /opt/FL2440 目录挂载到开发板的 /mnt 目录。当然,前提是开发板的linux 系统必须具备这个目录了。试试先在 ubuntu 的 /opt/FL2440 路径放个文件,然后在开发板的命令行终端敲入 ls /mnt ,是不是看到刚才所放的文件了?
八:如果第七步没有成功,请仔细检查以上七步,重复一到七步!
以上内容算是这两天的成果总结吧,后续的驱动的加载,都是在此基础上,所以,这些基础工作还是先打牢,再前进!