【Linux开发板】1、Linux驱动开发环境配置

1、linux开发环境搭建

#1、为了ubuntu与windows文件互传ls,安装ftp
#开启Ubuntu下的FTP服务
sudo apt-get install vsftpd		#安装ftp
sudo vi /etc/vsftpd.conf		#打开配置文件进行修改
#找到local_enable = YES和write_enable=YES
sudo /etc/init.d/vsftpd restart	#重启FTP

#2、之后运行Linux驱动开发的时候需要NFS启动,故安装NFS
sudo apt-get install nfs-kernel-server rpcbind
sudo vi /etc/exports
#在最后一行加上nfs文件夹路径
/home/hujinsong/linux/nfs *(rw,sync,no_root_squash)
sudo /etc/init.d/nfs-kernel-server restart	#重启nfs
#查看NFS共享目录,如果是上一步设置的说明配置成功
showmount -e 
#在开发板根文件系统中进行以下操作,仅为验证nfs挂载成功,没有烧录根文件可跳过
mkdir get
mount -t nfs -o nolock,nfsvers=3 192.168.10.100:/home/hujinsong/linux/IMX6UL/nfs get/		#将ubuntu(192.168.10.100)NFS共享目录挂载到开发板get目录中;
df				#查看挂载的nfs目录
umount get		#卸载NFS目录

#3、安装SSH服务,以便在windows下使用终端软件登录到Ubuntu,比如使用SecureCRT
sudo apt-get install openssh-server

#4、安装交叉编译器
sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f
sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
sudo vi /etc/profile
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin	#在配置文件最后一行说明编译器位置
arm-linux-gnueabihf-gcc -v		#交叉编译器验证

#5、安装相关库
sudo apt-get install lsb-core lib32stdc++6		#c标准库
sudo apt-get install libncurses5-dev			#编译uboot时用到
sudo apt-get install lzop						#编译Linux源码时用到

error1:使用apt工具时,显示:could not get lock /var/lib/dpkg/lock,说明apt工具被其他线程占用;解决方法如下:

sudo lsof /var/lib/dpkg/lock
sudo kill -9 2217
sudo rm /var/dpkg/lock
sudo dpkg --configure -a
sudo apt-get install nfs-kernel-server restart

2、移植uboot、linux、根文件系统

2.1 编译UBoot并烧录

Ubuntu所有的设备文件都在目录“/dev”里,插上SD卡后也在“/dev”里;查看SD卡:ls /dev/sd*,看插上SD卡之后多了那个目录就是你SD的挂在目录。

#1、首先安装ncurses库
sudo apt-get install libncurses5-dev
#将正点原子提供的uboot文件传到ubuntu对应目录,解压uboot
tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2
#编译uboot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
#uboot烧写与启动
sudo cp imxdownload /home/hujinsong/linux/file -f		#复制下载工具到u-boot.bin所在文件目录下
chmod 777 imxdownload									#修改imxdownload权限
./imxdownload u-boot.bin /dev/sdd						#烧写到sd,确认你的sd卡分区

将SD卡插入开发板,将拨码开关拨至从SD卡启动,按下复位键即可;之后开始挂载Linux内核,包括zImage和.dtb设备树两个文件,我这里选择通过网络挂载,所以需要先设置网络配置,保证Ubuntu可以和开发板互ping。然后安装并设置tftp或nfs,通过tftp或nfs完成Linux内核挂载。

2.2 网络环境搭建

2.2.1 配置Windows和VMware软件及Ubuntu网络设置

我的使用场景:电脑wifi上网,开发板和电脑直连
①首先设置ubuntu虚拟机:打开 “VMWare->虚拟机->设置” 并建立两个网络适配器,网络适配器1:桥接模式;网络适配器2:NAT模式;添加VMnet0,将其桥接到电脑网卡上;
设置虚拟机网络属性
配置VMnet0属性

②之后设置windows网卡:找到控制面板-网络和Internet-网络连接,设置以太网的IPV4地址;ip地址与前面设置的Vnet0保持同一网段,网关相同;
配置windows无线网卡IPV4属性

2.2.1 配置开发板uboot环境变量

设置uboot命令行:使用SD卡烧入uboot后,使用MobaXterm软件通过串口连接开发板,在窗口输入以下命令;测试后输出" host 192.168.10.100 is alive "表示设置成功;

setenv ipaddr 192.168.10.50				#设置ip地址,与ubuntu的桥接地址保持同一网段
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.10.1			#设置网段
setenv netmask 255.255.255.0
setenv serverip 192.168.10.100			#上文设置的ubuntu桥接IP地址
saveenv
ping 192.168.10.100						#ping测试,ubuntu地址为192.168.10.100

设置uboot网络属性

1.2.3 配置TFTP和nfs服务

保证开发板能ping通Ubuntu后,开始搭建tftp和nfs,之后开发过程中使用tftp挂载zImage和dtb、使用nfs挂载根文件系统。

#搭建TFTP
sudo apt-get install xinetd
ls /etc/xinetd.conf				#查看是否有xinetd.cof文件,没有的话自己创建一个

mkdir -p /home/linux/IMX6UL/file/tftp
sudo chmod 777 /home/linux/IMX6UL/file/tftp/
sudo apt-get install tftp-hpa tftpd-hpa			#安装tftp-hpa和tftpd-hpa服务程序
sudo vi /etc/default/tftpd-hpa
#修改TFTP_DIRECTORY=“自定义tftp工作目录”
sudo vi /etc/xinetd.d/tftp
sudo service tftpd-hpa restart			#重启tftpd-hpa服务
sudo service xinetd restart				#重启xinetd服务

#配置NFS,如果已经配置则跳过
sudo apt-get install nfs-kernel-server rpcbind
sudo vi /etc/exports
#在最后一行加上nfs文件夹路径(没有exports文件就自己创建一个)
/home/hujinsong/linux/nfs *(rw,sync,no_root_squash)
sudo /etc/init.d/nfs-kernel-server restart	#重启nfs
#查看NFS共享目录,如果是上一步设置的说明配置成功
showmount -e 

2.3 编译Linux源码,从网络启动内核

2.3.1 编译Linux源码,生成zImage和dtb

Linux驱动环境配置:编写linux驱动时,用到linux内核源码;将linux内核源码发送到ubuntu,解压linux内核源码,编译linux内核源码,得到zImage和.dtb。zImage文件存放在编译目录下./arch/arm/boot/zImage;.dtb文件存放在./arch/arm/boot/dts/imx6ull-14x14.dtb
将内核文件压缩包发送到ubuntu对应目录下,解压文件后编译linux内核

#编译前首先安装lzop
sudo apt-get install lzop
#获取内核源码
sudo rm linux-boot.tar.bz2 ./hujinsong/linux/linuxCode -f
tar -vxjf linux-boot.tar.bz2
#编译内核源码:创建shell脚本muname.sh,在该文件下写入以下内容:
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j12
#成功的标志:kernel:arch/arm/boot/zImage is ready
#修改顶层Makefile:进入linux源码起始目录,vi Makefile,找到ARCH和CROSS_COMPILE
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-
#手动编译设备树
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf ./arch/arm/boot/dts/imx6ull-14x14-emmc-7-1024x600-c.dtb
make dtbs			#之后修改设备数后只需要编译设备树,无需编译整个Linux内核源码
2.3.2 通过tftp网络挂载zImage和dtb设备树
#首先将zImage和dtb文件复制到ubuntu的tftp目录下;zImage在Linux编译目录下的arch/arm/boot/zImage,dtb设备树文件在Linus编译目录下的arch/arm/boot/dts/imx6ull-14x14-evk.dtb
cp /home/linux/arch/arm/boot/zImage /home/hjs/linux/IMX6UL/tftp/ -f
cp /home/linux/arch/arm/boot/dts/imx6ull-14x14-evk.dtb	/home/hjs/linux/tftp/ -f		#将zImage和dtb设备树文件复制到tftp目录下
tftp 80800000 zImage						#挂载zImage
tftp 83000000 imx6ull-14x14-evk.dtb			#挂载dtb
bootz 80800000 - 83000000					#启动,注意‘-’左右都有空格

在挂载时出现错误:IP-Config:Failed to open eth0,原因是变量bootargs设置错误,根据下文设置即可。

2.3.3 设置bootcmd和bootargs

进行这步前需要完成:编译并烧入uboot;编译Linux源码生成zImage和dtb;根文件系统
如果通过nfs挂载根文件系统,需要先将根文件系统复制到上文设置的根文件目录(如上文设置的:/home/hujinsong/linux/IMX6UL/nfs/rootfs);如果是从emmc启动根文件系统,需要先使用mfgTool将出场系统烧入开发板。

#如果从EMMMC启动内核、从emmc启动根文件系统
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;'s
saveenv
#如果从网络启动内核、从emmc启动根文件系统
setenv bootargs 'console==ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000;'
saveenv
#如果从通过nfs网络挂载根文件系统
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.10.100:/home/hujinsong/linux/IMX6UL/nfs/rootfs,prpto=tcp rw ip=192.168.10.50:192.168.10.100:192.168.10.1:255.255.255.0::eth0:off'
saveenv
boot   #使用网络挂载
#!出现No Soundcard found、IPconfig failed eth1..等错误,都因为是bootargs设置错误,检查是否输入错误
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值