电脑环境和开发板环境都已经搭建完成,下面要做的就是运行第一个APP和驱动程序,达到嵌入式入门。
此处是将hello.c文件建立并编译在共享文件夹下
假设Windows IP为192.168.1.100,在开发板上执行以下命令(注意:必须指定port为2049、 mountport为9999):
mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.100:/home/ww/nfs_rootfs /mnt cp /mnt/hello ./hello假设Ubuntu IP为192.168.10.128,在开发板上执行以下命令:
mount -t nfs -o nolock,vers=3 192.168.10.128:/home/ww/nfs_rootfs /mnt cp /mnt/hello ./hello补充: mobaxterm软件在复制过长的命令行时,出现覆盖的情况解决方法: 在log显示窗口右键 -> change terminal settings… ->Implict LF in every CR
添加可执行权限
chmod +x hello运行
./hello该实验参考朱有鹏老师的驱动开发
驱动开发得到的.ko文件必须与开发板上的内核同出一门,否则不能安装,出现报错信息:insmod:ERROR:coud not insert XXXX.ko:Invalid module format
module_test.c文件
#include <linux/module.h> #include <linux/init.h> // 模块安装函数 static int __init chrdev_init(void) { printk(KERN_INFO "chrdev_init helloword init\n"); return 0; } // 模块卸载函数 static void __exit chrdev_exit(void) { printk(KERN_INFO "chrdev_exit helloworld exit\n"); } module_init(chrdev_init); module_exit(chrdev_exit); // MODULE_xxx这种宏作用是用来添加模块描述信息 MODULE_LICENSE("GPL"); // 描述模块的许可证,这个许可证最好不要少,否则会出现莫名其妙的错误。 MODULE_AUTHOR("aston"); // 描述模块的作者 MODULE_DESCRIPTION("module test"); // 描述模块的介绍信息 MODULE_ALIAS("alias xxx"); // 描述模块的别名信息Makefile文件
KERN_VER = $(shell uname -r) KERN_DIR = /lib/modules/$(KERN_VER)/build obj-m += module_test.o all: make -C $(KERN_DIR) M=`pwd` modules cp: cp *.ko /home/ww/nfs_rootfs .PHONY: clean clean: make -C $(KERN_DIR) M=`pwd` modules clean进入到Makefile和module_test.c这两个文件的文件夹目录
cd /mnt/hgfs/share/x210v3/5.2.1 make all(加图)
查看驱动信息
modinfo module_test.ko查看已安装的驱动
lsmod安装 module_test 驱动
insmod module_test.ko再次查看已安装驱动,观察 module_test 驱动是否安装
lsmod卸载 module_test 驱动
rmmod module_test再次查看已安装驱动,观察module_test 驱动是否卸载
lsmod因为该驱动是运行在开发板上,故要使用开发板上的内核进行驱动编译。之前使用BSP时,已经编译好kernel,因此只需将Makefile中内核的路径修改为
KERN_DIR = /x210v3_bsp/qt_x210v3/kernelmodule_test.c文件不变和上面相同,只需要修改Makefile文件。
Makefile文件
KERN_VER = $(shell uname -r) #修改为开发板的linux内核的源码树目录 KERN_DIR = /x210v3_bsp/qt_x210v3/kernel obj-m += module_test.o all: make -C $(KERN_DIR) M=`pwd` modules cp: cp *.ko /home/ww/nfs_rootfs .PHONY: clean clean: make -C $(KERN_DIR) M=`pwd` modules clean进入BSP路径下
cd /x210v3_bsp/qt_x210v3生成zImage-qt
./mk -k生成rootfs文件夹
./mk -r生成ext3格式的rootfs镜像
./mk -re使用fastboot指令将 zImage-qt 和 rootfs_qt4.ext3 下载到开发板上。
进入到Makefile和module_test.c这两个文件的文件夹目录
cd /mnt/hgfs/share/x210v3/5.2.1 make all make cp假设Windows IP为192.168.1.100,在开发板上执行以下命令(注意:必须指定port为2049、 mountport为9999):
mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.100:/home/ww/nfs_rootfs /mnt假设Ubuntu IP为192.168.10.128,在开发板上执行以下命令:
mount -t nfs -o nolock,vers=3 192.168.10.128:/home/ww/nfs_rootfs /mnt查看已安装的驱动
lsmod安装 module_test 驱动
insmod module_test.ko再次查看已安装驱动,观察 module_test 驱动是否安装
lsmod卸载 module_test 驱动
rmmod module_test再次查看已安装驱动,观察module_test 驱动是否卸载
lsmod在uboot倒计时结束前,按回车键进入配置界面。
设置bootcmd使开发板通过TFTP下载自己建立的内核源码树编译得到的zImage
set bootcmd 'tftp 0x30008000 zImage;bootm 0x30008000'设置bootargs使开发板从NFS去挂载rootfs(内核配置记得打开使能nfs形式的rootfs)
setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200在内核目录下进行NFS配置
make menueconfig配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项 Networking support Networking options TCP/IP networking IP: kernel level autoconfiguration [] IP: DHCP support [] IP: BOOTP support
配置开启nfs服务 File systems —> Network File Systems —> <> NFS client support [] NFS client support for NFS version 3 [] NFS client support for the NFSv3 ACL protocol extension [] NFS client support for NFS version 4 (EXPERIMENTAL) [] NFS client support for NFSv4.1 (DEVELOPER ONLY) [] Root file system on NFS 重新编译内核
make distclean make x210ii_qt_defconfig make -j4进入到Makefile和module_test.c这两个文件的文件夹目录
cd /mnt/hgfs/share/x210v3/5.2.1 make all make cp查看已安装的驱动
lsmod安装 module_test 驱动
insmod module_test.ko再次查看已安装驱动,观察 module_test 驱动是否安装
lsmod卸载 module_test 驱动
rmmod module_test再次查看已安装驱动,观察module_test 驱动是否卸载
lsmod