韦东山全系列快速入门学习笔记1

0 GIT资料下载

1、想更新韦东山的资料,git clone之后,需要git pull,但是死活不行,提示要先指定远程仓库和分支,但是又死活指定不了,后来经同事指导,需要先进入clone下的目录,在这个目录中执行git pull就可以了。

1 环境搭建

交叉编译工具链安装路径:/opt/fsl-imx-x11/4.1.15-2.1.0
GCC编译器名称:arm-poky-linux-gnueabi-gcc
设置开发板IP地址:

ifconfig eth0 192.168.8.200

开发板挂载网络文件系统nfs:

mount -t nfs -o nolock,vers=3 192.168.8.201:/home/book /mnt

把ubuntu服务器/home/book目录挂在为/mnt目录
每次开机后需要是能环境变量%CC

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

注意:若使用NAT方式配置虚拟机网络,主机的IP地址和虚拟机的IP地址不能为同一个网段!

2 编译操作

编译C程序:

$CC main.c -o main
 arm-poky-linux-gnueabi-gcc  -march=armv7ve -mfpu=neon  -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi -o hello hello.c

制作、使用动态库:按照韦东山视频教程方法一直报错。

3 编译驱动程序操作

编译第一个驱动程序《01_hello_drv》,其中makefile需要进行适应性修改

KERN_DIR = /home/book/linux

all:
	make -C $(KERN_DIR) M=`pwd` modules 
	$(CC) -o hello_drv_test hello_drv_test.c 

clean:
	make -C $(KERN_DIR) M=`pwd` modules clean
	rm -rf modules.order
	rm -f hello_drv_test

obj-m	+= hello_drv.o

其中,$(CROSS_COMPILE)gcc -o hello_drv_test hello_drv_test.c 修改为$(CC) -o hello_drv_test hello_drv_test.c ,由于环境搭建的时候source语句已经把CC环境变量设置好了,如下文所示

CC=arm-poky-linux-gnueabi-gcc  -march=armv7ve -mfpu=neon  -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysrooky-linux-gnueabi

4 装载驱动程序

insmod hello_drv.ko // 安装驱动程序
cat /proc/devices//查看驱动程序

cat命令:linux下的一个文本输出命令,通常是用于观看某个文件的内容的。
/proc/devices文件:这个文件列出字符和块设备的主设备号,以及分配到这些设备号的设备名称。第一列是主设备号,第二列是设备名称。

以下是返回值:

Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
 13 input
 29 fb
 81 video4linux
 89 i2c
 90 mtd
108 ppp
116 alsa
128 ptm
136 pts
153 spi
180 usb
189 usb_device
207 ttymxc
216 rfcomm
226 drm
248 hello
249 ttyLP
250 iio
251 watchdog
252 ptp
253 pps
254 rtc

Block devices:
  1 ramdisk
259 blkext
  7 loop
  8 sd
 31 mtdblock
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
179 mmc

主设备号:248

lsmod//查看内核中加载的驱动程序
返回值:
Module                  Size  Used by
hello_drv               3238  0
mx6s_capture           14876  0
ov5640_camera          19965  0
ls /dev/hello -l//查看主设备节点
返回值:
crw------- 1 root root 248, 0 Sep 13 22:01 /dev/hello

ls /dev/100ask_led* -l//查看子设备节点
crw------- 1 root root 248, 0 Sep 13 21:51 /dev/100ask_led0
crw------- 1 root root 248, 1 Sep 13 21:51 /dev/100ask_led1

卸载驱动程序

rmmod hello_drv

5 poll机制学习

(1)查看进程指令

ps -A | grep signal

在这里插入图片描述
2807即为进程号

6 更换设备树

6.1 确定需要更换的设备树存储的位置

(1)方法一
我使用的是正点原子的开发板,所以更新设备树文件需要参考该板子的开发手册《【正点原子】I.MX6U 开发板与pc传输文件、单步更新固件参考手册V1.0》P27:

  1. 使用 ls 指令查看 eMMC 的 boot 分区设备树所在的目录,如下图,有各种屏对应的设备树,
  2. 根据个人的屏的使用对应的设备树即可,如果没有屏,默认使用的是 imx6ull-14x14-emmc-4.3-48
    0x272-c.dtb 这个设备树,更新这个设备树即可。
USER# ls /run/media/mmcblk1p1

在这里插入图片描述
(2)方法二
《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.4》P1014 《39.5.3 解决 Linux 内核启动失败》
重启 uboot,进入到命令行模式,输入如下命令查看 EMMC 的分区 1 里面有没有设备树文件:
在这里插入图片描述
在这里插入图片描述
可以看到以上两种方法分别在linux和uboot查找MMC卡第一个分区中的文件内容。

6.2 确定需要更换的设备树的文件名

从截图中可以看到为了适配不同的屏幕里面有一大堆设备树,那么我目前使用的开发板对应的设备树到底是哪个呢?
(1)方法1
查看内核启动log
在这里插入图片描述
(2)方法2
查看uboot内部环境变量设置:
在这里插入图片描述

6.3 修改设备树文件

(1)查看设备树文件:arch/arm/boot/dts/imx6ull-14x14-emmc-4.3-480x272-c.dts
在这里插入图片描述
直接在文件末尾修改:
在这里插入图片描述

直接编译设备树:

`make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs -j16`

6.4重新启动单板

在这里插入图片描述
hexdump :十六进制数据查看工具
cat :一个文本文件查看和连接工具。

6.5查看设备树信息

有无对应的platform_device:cd /sys/devices/platform/
设备树的信息:cd /sys/firmware/devicetree/base/

7 更换内核

把服务器上面编译的zImage拷贝到开发板上对应的目录中,稍后重新开发板

cp /mnt/linux-imx-4.1.15-2.1.0/arch/arm/boot/zImage /run/media/mmcblk1p1
reboot

重启开发板之后查看内核日期已经更新
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值