嵌入式环境搭建之开发板软件环境
转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/44995039
开发板软件环境:uboot(用官方给的,后续我会考虑分析移植)
内核(本来想用官方的降低难度,但给的不支持nfs,简单更改下吧,后续考虑移植精简新内核)
文件系统(移植最小文件系统)
1.修改开发板官方内核支持nfs
a.用ftp工具从主机拷贝内核到虚拟机,然后解压
b.copy 官方配置文件 .config(不同开发板配置文件不同,我的操作是cp config_for_linux .config)
c.make menuconfig
出错:我碰见过两种,第一种错误是终端太小,装不下图形配置。
第二种是缺少ncurses库,解决办法$sudo apt-get install libncurses5-dev
d. 修改配置选项如图
选中 IP: kernel level autoconfiguration
更改后保存,然后make
e.将生成的内核烧进开发板
f.测试nfs功能
mount -t nfs -o nolock 192.168.6.2:/work /mnt
如果开发板文件系统的/mnt 挂在到了虚拟机的/work上则证明成功
2.制作最小网络文件系统
a.下载BusyBox(直接百度,然后进入官网,我下载是最新的稳定版本1.23.2)然后解压
b.make menuconfig
1.修改系统安在哪,叫什么名,如图,这个是我的配置:
2.用什么编译器
c.make 然后 make install之后你的系统应该已经生成了。
d.把交叉编译器里面的库文件,拷贝到我们的最小网络文件系统中(注意-d选项)
cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* /work/nfs_sys/mini_sys
e.接下来需要创建几个文件,如果懒得创建的话,我后续把我的文件系统传上来,大家copy下也可以
在/etc下创建三个文件 etc/initab etc/init.d/rcS etc/fstab三个文件内容如下:
etc/fstab
::sysinit:/etc/init.d/rcS ttySAC2::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r
etc/init.d/rcS
#!/bin/sh ifconfig eth0 192.168.6.4 mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug <p>echo 0 > /proc/sys/kernel/hung_task_timeout_secs</p> mdev -s
etc/initab
# dev mount type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0
除此之外还需要创建/dev文件夹。然后在下面创建这两个设备文件
mknod consol c 5 1
mknod null c 1 3
f.启动开发板uboot修改启动参数,如下:
set bootargs console=ttySAC2,115200 init=/linuxrc rootfstype=ext4 root=/dev/nfs rw nfsroot=192.168.6.2:/work/nfs_sys/mini_sys ip=192.168.6.4:192.168.6.2:192.168.6.1:255.255.255.0:ruoyun:eth0:off
如果OK的话,可以保存环境变量,每次开机就可以直接挂在文件系统了。
g.创建其余目录
mkdir proc mnt tmp sys root
h.如果能顺利进入系统,看到这句话Please press Enter to activate this console.那么恭喜你成功了。测试下创建文件,看虚拟机和开发板是否同步(注意不要在tmp文件夹下创建,我发现在此文件夹下,数据不能同步,不知道什么原因)
3.编写第一个驱动
a.编写驱动文件
#include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h> static int hello_init(void) { printk(KERN_ALERT "hello world.\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "exit hello world.\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL");
b.编写Makefile
KERN_DIR = /work/kernel/itop/iTop4412_Kernel_3.0 all: make -C $(KERN_DIR) M=`pwd` modules clean: make -C $(KERN_DIR) M=`pwd` modules clean rm -rf modules.order obj-m += hello_drv.o
c.测试
在虚拟机上先make ,生成.ko文件。然后将.ko文件放在开发板启动的网络文件系统中,然后insmod
如果出现hello world。那么证明你成功了。
然后rmmod,我在做的时候出现了一个错误。如下:
rmmod: can't change directory to '/lib/modules': No such file or directory
解决办法就是mkdir /lib/modules/3.0.15 (最后面的是你的内核版本号)如果rmmod出现了exit hello world. 那么恭喜你成功了。
到这里环境已经搭建好了,大家可以继续接下来的驱动去学习了,后续我会继续写一些驱动相关的文章的。