文章目录
开发板和 Ubuntu 之间传文件
在 Ubuntu 上安装、配置 NFS 服务
安装NFS服务
sudo apt-get install nfs-kernel-server
修改/etc/exports,添加类似以下的内容(允许开发板通过 NFS访问 Ubuntu 的/home/book)
/home/book *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
重启NFS服务
sudo /etc/init.d/nfs-kernel-server restart
验证挂载自己
sudo mount -t nfs -o nolock,vers=3 127.0.0.1:/home/book /mnt
ls /mnt
在开发板上挂载
首先保证双方相互ping通。假设Ubuntu的ip地址为:192.1681.100
mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book /mnt
一切顺利,就能在开发板的/mnt文件夹中访问到Ubuntu的/home/book文件夹里的文件了
开发前准备
在线下载内核及工具链
配置repo
git config --global user.email "user@100ask.com"
git config --global user.name "100ask"
下载源码
git clone https://e.coding.net/codebug8/repo.git
mkdir -p 100ask_imx6ull_mini-sdk && cd 100ask_imx6ull_mini-sdk
../repo/repo init \
-u https://gitee.com/weidongshan/manifests.git -b linux-sdk \
-m imx6ull/100ask_imx6ull_mini_linux4.9.88_release.xml --no-repo-verify
../repo/repo sync -j4
压缩
tar cjf Linux-4.9.88.tar.bz2 Linux-4.9.88
配置交叉工具链
永久生效
vi ~/.bashrc
在尾行加上
export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull_mini-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
使文件生效
source ~/.bashrc
验证
arm-buildroot-linux-gnueabihf-gcc -v
下载教程源码
git clone https://e.coding.net/weidongshan/01_all_series_quickstart.git
APP实验
找到01_all_series_quickstart\04_嵌入式Linux应用开发基础知识\source\01_hello中hello.c,如下所示
#include <stdio.h>
/* 执行命令: ./hello weidongshan
* argc = 2
* argv[0] = ./hello
* argv[1] = weidongshan
*/
int main(int argc, char **argv)
{
if (argc >= 2)
printf("Hello, %s!\n", argv[1]);
else
printf("Hello, world!\n");
return 0;
}
Ubuntu可执行文件
通过gcc生成在Ubuntu的可执行文件
gcc -o hello hello.c
在Ubuntu中执行效果
./hello
->Hello, world!
./hello weidongshan
->Hello, weidongshan!
开发板可执行文件
使用交叉编译工具链生成开发板的可执行文件
arm-buildroot-linux-gnueabihf-gcc -o hello hello.c
将可执行文件拷贝到nfs服务文件夹下
cp hello /home/book
开发板挂载并将文件拷贝到自己的文件夹下
mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book /mnt
cp /mnt/hello ./hello
给文件增加可执行权限,执行
chmod +x hello
./hello
驱动实验
找到驱动源码01_all_series_quickstart/05_嵌入式Linux驱动开发基础知识 \
/source/02_led_drv/02_led_drv_for_boards/100ask_imx6ull_src_bin
配置文件位于内核源码arch/arm/configs/目录(内核源码就是Linux-4.9.88)
编译内核镜像(ubuntu)
kernel编译
make mrproper
make 100ask_imx6ull_mini_defconfig
make zImage -j2
make dtbs
将生成的内核文件zImage,设备树文件100ask_imx6ull_mini.dtbs移到nfs服务根目录
cp arch/arm/boot/zImage /home/book
cp arch/arm/boot/dts/100ask_myir_imx6ull_mini.dtb /home/book
编译安装内核模块(ubuntu)
编译
cd ~/100ask_imx6ull_mini-sdk/Linux-4.9.88/
make ARCH=arm CROSS_COMPILE=arm-buildroot-linux-gnueabihf- modules
安装
sudo apt install tree
cd ~/100ask_imx6ull_mini-sdk/Linux-4.9.88
sudo make ARCH=arm INSTALL_MOD_PATH=/home/book modules_install
安装镜像,模块到开发板
挂载
mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book /mnt
复制文件到开发板
cp /mnt/zImage /boot
cp /mnt/*.dtb /boot
cp /mnt/lib/modules /lib -rfd
重启
restart
编译led模块
修改makefile文件KERN_DIR为自己内核所在路径,在01_all_series_quickstart/05_嵌入式Linux驱动开发基础知识 \
/source/02_led_drv/02_led_drv_for_boards/100ask_imx6ull_src_bin中
建议用pwd命令复制内核路径
执行 make all命令就可以编译,编译完成后会生成 100ask_led.ko ledtest 两个文件
make all
把这两个文件拷贝到 Ubuntu nfs服务 目录下
cp 100ask_led.ko ledtest /home/book
开发板复制这两个文件
cp /mnt/100ask_led.ko ./\
cp /mnt/ledtest ./
关闭系统led状态灯控制
echo none > /sys/class/leds/cpu/trigger
安装led模块
insmod 100ask_led.ko
执行
chmod +x ./ledtest
./ledtest
打开LED0
./ledtest /dev/100ask_led0 on
关闭LED0
./ledtest /dev/100ask_led0 off