蒋迪的博客
| 关于 | 归档

#嵌入式 OpenWrt 学习记录

Openwrt 学习记录

修订记录

修订时间 修订内容 修订人
20200720 搭建文章基本框架;
OpenWrt驱动开发流程;
JD
20200828 补充Openwrt文件系统部分;
overlay手动挂载;
JD

简介

OpenWrt ​is a highly extensible ​GNU/​Linux ​distribution for embedded devices ​(typically wireless routers). —Wiki

编译

Make方法

模块的编译以及其他make方法

make package/tcpdump/clean
make package/tcpdump/compile

添加 V=s 可以查看详细的编译过程

其他全局编译命令

make clean

源码目录简介

通过网络上一些博文的学习,初步了解了openwrt的源码目录框架。一般我们位openwrt做一些定制化的修改,只需要修改package目录和config.in文件即可。

-config 
-include 
-package #各种功能的软件包,我们自己的模块/软件可以放于此处
-scripts
-target 
-toolchains
-tools
Config.in #通常配置编译模块我们需要在此配置
Makefile
rules.mk

在执行编译后,还会生成几个目录。编好的版本也位于其中的build_der/version

参考文档:

启动流程

驱动开发

由前面简单介绍的Openwrt的源码目录可知,如果需要加入我们自己定制的模块,通常我们将模块放置于package/kernel目录下,具体模块组成框架及内容模仿其他内核模块的写法。

demo
├── Makefile
└── src
    ├── Kconfig(非必要)
    ├── demo.c
    └── Makefile

为了避免重复造轮子,具体实现可以看如下参考文档。

参考文档:

参考文档

应用程序编译及其make方法

demo
├── Makefile
|── file
|   |── demo(启动脚本)
|   |── conf(配置文件)
|   |__ ***
|
└── src
    ├── demo.h
    ├── demo.c
    └── Makefile

参考链接

overlay

手动挂载overlay

首先通过如下命令cat /proc/mtd查看rootfs_data分区所执行的flash内存块。 我的系统是/dev/mtdblock11 对应的 rootfs_data

mount -n -t jffs2 /dev/mtdblock11 -o rw,noatime,mode=0755 /overlay
mount -n -t overlayfs overlayfs:/overlay -o rw,noatime,lowerdir=/,upperdir=/overlay /mnt
mount -n /proc -o noatime,--move /mnt/proc
pivot_root /mnt /mnt/rom 
mount -n /rom/dev -o noatime,--move /dev
mount -n /rom/tmp -o noatime,--move /tmp
mount -n /rom/sys -o noatime,--move /sys
mount -n /rom/overlay -o noatime,--move /overlay

参考资料