首页
关于
友链
其它
统计
壁纸
Search
1
修改Linux Kernel defconfig的标准方法
5,691 阅读
2
cgroup--(4)cgroup v1和cgroup v2的详细介绍
5,227 阅读
3
Android系统之VINTF(1)manifests&compatibility matrices
5,132 阅读
4
c语言的__attribute__
3,016 阅读
5
使用git生成patch和应用patch
2,488 阅读
默认分类
文章收集
学习总结
每天一刷
环境配置
知识点
入门系列
vim
shell
Git
Make
Android
Linux
Linux命令
内存管理
Linux驱动
Language
C++
C
工具
软件工具
Bug
COMPANY
登录
Search
标签搜索
shell
Linux
c
uboot
Vim
vintf
Linux驱动
Android
device_tree
git
DEBUG
链表
数据结构
IDR
内核
ELF
gcc
网址
内存管理
进程管理
adtxl
累计撰写
342
篇文章
累计收到
8
条评论
首页
栏目
默认分类
文章收集
学习总结
每天一刷
环境配置
知识点
入门系列
vim
shell
Git
Make
Android
Linux
Linux命令
内存管理
Linux驱动
Language
C++
C
工具
软件工具
Bug
COMPANY
页面
关于
友链
其它
统计
壁纸
搜索到
23
篇与
的结果
2022-10-22
[正点原子]Linux驱动学习笔记--2.LED驱动实验(直接操作寄存器)
暂无简介
2022年10月22日
363 阅读
0 评论
0 点赞
2022-10-22
[正点原子]Linux驱动学习笔记--1.第一个Linux驱动(字符设备驱动)
暂无简介
2022年10月22日
444 阅读
0 评论
0 点赞
2022-10-22
[正点原子]Linux驱动学习笔记--0.基本环境准备
1. 代码准备为了使用、学习方便,在github上新建了两个仓库,将正点原子提供的linux和uboot code放到了上面。https://github.com/ADTXL/imx_uboothttps://github.com/ADTXL/imx_linux2. uboot编译编译命令如下// 安装ncurses库 sudo apt-get install libncurses5-dev // 512MB+8GB 的 EMMC 核心板 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig make V=0 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16或者直接运行正点原子提供的脚本./mx6ull_alientek_emmc.sh编译完成后如下所示:其中,u-boot.bin就是编译出来的uboot二进制文件。uboot是个裸机程序,因此需要在其前面加上头部(IVT、DCD等数据)才能在I.MX6U上执行。u-boot.imx文件就是添加头部以后的u-boot.bin,u-boot.imx就是我们最终要烧写到开发板中的uboot镜像文件。3. linux编译直接运行脚本./mx6ull_alientek_emmc.sh编译完成后,有两个以后烧写需要用到的文件,即kernel image(arch/arm/boot)和dtb(arch/arm/boot/dts目录)文件.4. 烧写image4.1 使用tftp烧写uboot是支持网络的,在使用uboot的网络功能之前先用网线将开发板的的ENET2接口(ALPHA开发板靠近vga线的那个)和电脑或者路由器连接起来。然后设置下面几个环境变量环境变量描述ipaddr开发板ip地址,可以不设置,使用dhcp命令来从路由器获取ip地址ethaddr开发板的mac地址,一定要设置gatewayip网关地址netmask子网掩码serverip服务器ip地址,也就是ubuntu主机地址,用于调试代码我的开发板是直连windows的,没有使用路由器,使用了这个博客里的方法超全详细,解决校园网没有路由器实现开发板和虚拟机直连,亲测可用.setenv ipaddr 192.168.10.101 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 saveenv使用ping命令测试下,是ok的=> ping 192.168.10.100 Using FEC1 device host 192.168.10.100 is alive tftp使用tftp协议,将ubuntu主机作为tftp服务器,通过网络把镜像烧写到dram中。因此,需要在ubuntu上搭建TFTP服务器,需要安装tftp-hpa和tftpd-hpa,命令如下:sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd然后,需要创建一个目录存放镜像文件/home/user/linux/tftpboot,需要注意,需要给此目录读写权限,否则的话uboot不能从tftpboot文件夹里下载文件。最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行创建,然后在里面输入如下内容:server tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /home/user/linux/tftpboot 9 disable = no per_source = 11 cps = 100 2 flags = IPv4 }完了以后启动 tftp 服务,命令如下:sudo service tftpd-hpa start打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/home/user/linux/tftpboot" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="-l -c -s" 最后输入如下命令, 重启 tftp 服务器:sudo service tftpd-hpa restart最后,我们测试下能否烧写成功,tftp命令格式如下tftpboot [loadAddress] [[hostIPaddr:]bootfilename]例如下面的命令,我们通过tftp命令把kernel镜像Image文件,烧写到dram中的80800000地址。=> tftp 80800000 Image Using FEC1 device TFTP from server 192.168.10.100; our IP address is 192.168.10.101 Filename 'Image'. Load address: 0x80800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ####################################################### 2.2 MiB/s done Bytes transferred = 11302188 (ac752c hex)除了tftp,还有其他的烧写方法,这里就先不研究了~5. 搭建NFS环境NFS(Network File System),网络文件系统,是由SUN公司研制的UNIX表示层协议,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。我们可以使用NFS加载文件系统到开发板上,方便开发。5.1 配置NFS服务安装NFS服务在 Ubuntu 终端执行以下指令安装 NFS。sudo apt-get install nfs-kernel-serverNFS共享目录新建NFS共享目录,并给予rwx权限,本地新建目录为/home/user/linux/nfs配置NFS服务执行以下指令打开 etc/exports 文件sudo vi /etc/exports进入 etc/exports 文件,在最后添加如下内容/home/user/linux/nfs *(rw,sync,no_root_squash)/home/user/linux/nfs 表示 NFS 共享的目录*表示允许所有的网络段访问rw 表示访问者具有可读写权限sync 表示将缓存写入设备中,可以说是同步缓存的意思no_root_squash 表示访问者具有 root 权限。修改完如下图所示。# /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /home/user/linux/nfs *(rw,sync,no_root_squash) 修改完以后保存退出。执行以下指令重启 NFS 服务器。sudo /etc/init.d/nfs-kernel-server restart执行以下指令查看 NFS 共享目录。showmount -e,如下所示user@ubuntu:~/linux/nfs$ showmount -e Export list for ubuntu: /home/user/linux/nfs *5.2 开发板测试确保网络环境正常,Ubuntu、Windows 和开发板能相互 ping 通。这里结合 4.1 小节的配置来验证,即:setenv ipaddr 192.168.10.101 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 saveenv开发板 IP:192.168.10.101windows 有线IP: 192.168.10.99虚拟机 IP:192.168.10.100开发板开机后,需要手动设置ip,ifconfig eth0 up ifconfig eth0 192.168.10.101 ifconfig查看设置结果,root@ATK-IMX6U:~# ifconfig eth0 Link encap:Ethernet HWaddr 88:36:fd:16:f1:cc inet addr:192.168.10.101 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::8a36:fdff:fe16:f1cc/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:152 errors:0 dropped:0 overruns:0 frame:0 TX packets:56 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:12135 (11.8 KiB) TX bytes:15504 (15.1 KiB) eth1 Link encap:Ethernet HWaddr 88:af:c1:a1:1c:7d UP BROADCAST MULTICAST DYNAMIC MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:158 errors:0 dropped:0 overruns:0 frame:0 TX packets:158 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:10652 (10.4 KiB) TX bytes:10652 (10.4 KiB) 在/home/user/linux/nfs 目录下创建一个 mytest.c 文件,在里面写入 hello world!执行以下指令设置开发板 IP,创建一个 get 目录,将虚拟机(192.168.10.100)NFS 共享目录挂载到到开发板的 get 目录中。mkdir get mount -t nfs -o nolock,nfsvers=3 192.168.10.100:/home/user/linux/nfs get/使用df命令查看挂载的 NFS 目录:root@ATK-IMX6U:~/get# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 7342568 645076 6301460 10% / devtmpfs 187632 120 187512 1% /dev tmpfs 40 0 40 0% /mnt/.psplash tmpfs 253432 192 253240 1% /run tmpfs 253432 144 253288 1% /var/volatile /dev/mmcblk1p1 32248 6902 25347 22% /run/media/mmcblk1p1 192.168.10.100:/home/user/linux/nfs 205312000 24284160 170525696 13% /home/root/get root@ATK-IMX6U:~# mount -t nfs -o nolock,nfsvers=3 192.168.10.100:/home/user/linux/nfs get/ root@ATK-IMX6U:~# cd get/ root@ATK-IMX6U:~/get# ls -al total 11M drwxrwxr-x 2 1000 tracing 4.0K Nov 12 2022 . drwx------ 5 root root 4.0K Jul 21 15:12 .. -rwxrwxr-x 1 1000 tracing 11M Nov 12 2022 Image -rw-rw-r-- 1 1000 tracing 13 Nov 12 2022 mytest.c root@ATK-IMX6U:~/get# cat mytest.c hello world! 卸载 NFS 目录:umount getroot@ATK-IMX6U:~# umount get root@ATK-IMX6U:~# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 7342568 645076 6301460 10% / devtmpfs 187632 120 187512 1% /dev tmpfs 40 0 40 0% /mnt/.psplash tmpfs 253432 188 253244 1% /run tmpfs 253432 144 253288 1% /var/volatile /dev/mmcblk1p1 32248 6902 25347 22% /run/media/mmcblk1p1 可以看到 192.168.10.100:/home/user/linux/nfs 已经卸载了。6. 使用NFS挂载rootfs6.1 网络环境准备如前所述,搭建好tftf和nfs网络环境,6.2 内核文件准备将光盘中提供的内核镜像和dtb文件服务到tftp工作目录,并给予rwx权限。6.3 文件系统准备在nfs共享目录创建一个rootfs目录用于存放文件系统。将光盘里的busybox文件系统拷贝、解压缩到上面创建的rootfs文件夹中6.4 tftp烧写内核、设备树进入到uboot命令行,设置开发板ip信息setenv ipaddr 192.168.10.101 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 saveenv可以ping下开发机地址,看能否ping通设置环境变量 bootcmd 来烧写 tftp 目录下的内核、设备树文件到开发板内存中,setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-emmc.dtb;bootz 80800000 - 83000000' saveenv这样每次开机时将自动烧写kernel镜像和dtb。一般没必要每次都重烧,所以上面的命令也可以手动执行6.5 NFS挂载文件系统设置环境变量bootargs来挂载nfs目录下的rootfs,setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.10.100:/home/user/linux/nfs/rootfs,proto=tcp rw ip=192.168.10.101:192.168.10.100:192.168.10.1:255.255.255.0::eth0:off' saveenv如果使用的时ubuntu18或更高的版本,uboot无法通过nfs启动ubuntu系统内的共享目录。需要在/etc/default/nfs-kernel-server 文件进行修改,改好了保存退出,然后重启一下 nfs 就可以了,或者报错 Loading:*ww ERROR:File lookup fail 的也是按照下面的方法来解决。按照上面截图改完后保存退出,再执行以下指令重启 nfs 服务。sudo service nfs-kernel-server restart(这里遇到个问题,不知道是不是我上传zIamge的时候有问题,换了个出厂系统自带的zImage才可以)经测试OK,
2022年10月22日
555 阅读
0 评论
0 点赞
1
2
3