系统移植学蒙蔽了。终于可以开始学驱动了。
记录一下遇到的问题,备忘。
IMX6ULL mini跟教程一直linux内核修改网络驱动出现问题-OpenEdv-开源电子网
正点原子的LCD口和模拟开关和网口有问题,LCD输出能力过强会影响eth(因为模拟开关?),eth不稳定。修改设备树,降低IO能力,一般会恢复正常。
ps:问题已找到,屏幕线太靠近网口了
zImage生成在kernel/arch/arm/boot下,设备树在/kernel/arch/arm/boot/dts下
uboot和Linux的网络环境变量的设置,ipaddr ,ethaddr ,gatewayip ,netmask ,serverip
设置之前记得ifconfig和ping一下ip地址,看看是否被占用,否则可能出现ethx up和down循环出现的情况,网络eth不稳定前提排除硬件因素。
ping后结果为badip, 可能是DNS域名解析错误,etc/resolv.conf内设置。
man命令很好用,man -123 调用 1内核 2系统 3用户。
目前从sd卡启动uboot,然后TFTP下载zImage和.dtb,从网络nfs挂载文件系统,比较方便调试
bootcmd=tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000; setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.1.103:/home/alientek/linux/nfs/my-rootfs ip=192.168.1.134:192.168.1.103:192.168.1.1:255.255.255.0::eth0:off'
linux下字符驱动
首先需要注册设备号 自己定义构建一个模块结构体 --其中包含 设备号,cdev,class,device等
设备号---注册设备号,编号 --- 12主---20从---
然后是cdev
struct cdev {
struct kobject kobj;
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
} 创建cdev,将*ops纳入其中,在调用cdev_add加入cdev列表
class类 ---class_create(THIS_MODULE,NEWCHRDEVLED_NAME)
if(IS_ERR(obj.class))
return PTR_ERR(obj.class);判断合法指针
device设备--- device_create(struct class *cls, struct device *parent,
dev_t devt, void *drvdata,
const char *fmt, ...)
创建device需要class,父设备,设备号,xxx,驱动名------由此才/dev/下才有节点



