使用Mftool固化正点原子出厂系统到开发板,如果检测不到开发板需要复位一下开发板(固化教程参考正点原子的快速体验手册)
这里的Ubuntu,开发板,Windows之间的局域网搭建参考韦东山教程,我这里用的是USB转网口来与开发板进行连接。
开发板设置静态IP。
连接到MobXterm,串口波特率115200
启动开发板
编辑/etc/network/interfaces文件
vi /etc/network/interfaces
//可以看到如下内容
# Wireless interfaces
iface wlan0 inet dhcp
wireless_mode managed
wireless_essid any
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf
iface atml0 inet dhcp
# Wired or wireless interfaces
auto eth0
iface eth0 inet dhcp
iface eth0 inet static
iface eth1 inet dhcp
# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
iface usb0 inet static
address 192.168.7.2
netmask 255.255.255.0
network 192.168.7.0
gateway 192.168.7.1
接着注释掉eth0
在后面添加如下,
iface eth0 inet static //静态IP
address 192.168.150.8 //开发板IP
netmask 255.255.255.0 //子网掩码
添加完之后文件内容如下
# The loopback interface
auto lo
iface lo inet loopback
# Wireless interfaces
iface wlan0 inet dhcp
wireless_mode managed
wireless_essid any
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf
iface atml0 inet dhcp
# Wired or wireless interfaces
auto eth0
#iface eth0 inet dhcp //注释掉
iface eth0 inet static
address 192.168.150.8 //添加的IP
netmask 255.255.255.0
iface eth1 inet dhcp
# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
iface usb0 inet static
address 192.168.7.2
netmask 255.255.255.0
network 192.168.7.0
gateway 192.168.7.1
然后设置开机自启动
vi /etc/init.d/rc
在文件最后添加如下内容
上面是你的IP,下面是网关,根据自己的实际IP添加
ifconfig eth0 192.168.150.8 netmask 255.255.255.0
route add default gw 192.168.150.1
重启网卡
/etc/init.d/networking restart
可以ping一下Ubuntu服务器检验
挂载网络文件系统
这里默认Ubuntu nfs服务已经开启,并且创建有共享文件夹nfs(如果没创建的话可以自搜教程创建)
正点原子教程里边设置的开机自动启动并挂载,而且要在ubuntu创建根文件系统,这里的话不需要,只需要一个nfs的共享文件夹即可
使用mount命令挂载将ubuntu的nfs文件夹挂载到开发板根目录的mnt目录下(出厂系统烧录的文件系统中有mnt目录,没有的话自行创建),使用mount命令前建议ping一个服务器进行网络检验。
mount -t nfs -o nolock,vers=4 192.168.150.16:/home/lxy/linux/nfs /mnt
挂载好之后进入mnt目录就能到到共享文件夹中的文件了。命令:cd /mnt
将内核源码拷贝到ubuntu系统,正点原子的在 例程源码->正点原子Uboot和Linux出厂源码,
解压之后使用自带build.sh脚本进行编译,编译完成之后要修改顶层Makefile,不然后续会出问题,笔者在第二遍做的时候忘记了,这里碰到许多问题。
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-
之后从 例程源码->驱动例程中拷贝例程源码到Ubuntu,修改Makefilede上的内核路径,这里以源码中第一个驱动为例
KERNELDIR := /home/lxy/linux/board/kernel //将这里改为刚才移植过来并编译好的内核源码路径
CURRENT_PATH := $(shell pwd)
obj-m := chrdevbase.o
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
进入驱动文件夹下,使用make -j32命令重新编译驱动,会生成.ko文件,使用交叉编译器编译应用程序chrdevbaseApp.c文件,
arm-linux-gnueabihf-gcc chrdevbaseApp.c -o chrdevbaseApp
将生成的驱动.ko文件和应用的可执行文件也拷贝到nfs文件夹。
在开发板中进入mnt目录,找到存放.ko文件的文件夹(这里文件系统中的文件夹自己随意建立,我这里创建的nfs/rootfs/imx6ulll_project),
使用命令
dmesg -c //清除显示的缓冲区
insmod chrdevbase.ko //挂载驱动
lsmod //查看模块
此外还要手动创建设备节点
mknod /dev/chrdevbase c 200 0
成功后会在/dev生成chrdevbase文件,可以进入/dev目录下查看
然后运行可执行的App文件即可
./chrdevbaseApp /dev/chrdevbase 1
注意命令行参数
结果如下