1.rk3568的编译与烧录

编译:

1.SDK整体编译,在SDK根目录下, ./.build.sh all  这个是build.h脚本,vim build.h可以进行查看,或者 ./build.sh -h
编译完,进行打包到rockdev, ./build.sh firmware     rockdev指向output/firmware目录
再执行  ./build.sh updateimg   打包,会在output/firmware目录下生成update.img, 编译后的文件会进入bool.img文件

        

2.单独编译,如kernel开发,Uboot开发
单独编译kernel:在SDK根目录下, ./build.sh kernel  ,单独编译,可能还需要更改kernel目录下的deconfig改为.config

单独编译kernel  内核,设备树  编译内核的时候会一起编译设备树,

得到kernel.img(内核镜像boot.img),   resource.img(设备树镜像),

俩者会和内核DTB打包到boot.img,

./build.sh kernel  

烧录:

1.整体烧录:rockdev工具下,直接烧写固件,需要时Loadar模式,

2.单img烧录,单独烧写boot.img, kernel单独编译后会存在这,先烧写一个Linux固件,再将固件生成的paremeter.txt, 注意里面img的后面的地址,需要再最前面进行修改。


1.  首先将rockdev下默认的cfg文件导入到界面,然后修改各个img的名字,没有的删掉,匹配好自己编译好的固件的img名字,update.img不要管。可以对照parameter.txt文件对照,
2.   然后修改路径,指向你的img路径,
3.   最后比对地址,直接烧进去就可以

可以用串口MobaXterm查看,ssh

2.make menuconfig

/搜索

空格切换

M     把驱动编译成模块

*      把驱动编译到内核里面

无      不编译

[]        *     无

<>      M     *     无

()字符串,16进制数

1. 图形化界面,里面的选项是Kconfig,也就是菜单,kernel目录下的图形化界面,会包含下面目录所有的Kconfig,所以在字符设备下多了个Kconfig,需要在上一级目录包含,source命令。

Kconfig 配置选项定义子文件

.config配置文件  实际编译的配置

deconfig配置文件  系统默认配置文件

saveconfig精简配置保存  make saveconfig   只保存非默认值的配置

2.更改了make menuconfig,还需要将这个配置文件deconfig修改,因为kernel的Makefile会使用deconfig配置文件,修改之后的.config配置文件需要覆盖deconfig,这样图形化界面才会有我添加的Kconfig

3.source “路径” 上一级目录下,打开vim Kconfig,包含下一级的 上一级Kconfig包含这个Kconfig
        source “init/Kconfig”  读取init目录下Kcongfig文件

4. .config查看

回到kernel目录, make menuconfig,drives目录下的char字符设备目录

查看变量没有,要在图形化界面保存

3.详解Makefile, Kconfig,  .config

Makefile  菜的做法 炒

make是一个自动化构建工具,通过读取 Makefile文件来管理编译过程。

make           # 构建默认目标(通常是第一个目标)
make target    # 构建指定目标
make -j4       # 使用4个并行任务加速构建
make clean     # 执行清理操作
make -n        # 干运行(显示但不执行命令)

obj-m的作用

告诉内核构建系统将指定的目标文件编译为​​可加载模块​​(.ko 文件)
obj-m += helloworld.o  # 将 helloworld.c 编译为模块

obj-y- 编译进内核镜像                ​​作用​​:将目标文件直接编译进内核镜像 (vmlinux)
obj-y += core.o      # 将 core.c 编译进内核
obj-y += drivers/    # 编译整个 drivers 目录

obj-n- 不编译      作用​​:明确指定不编译某个目标
obj-n += deprecated.o  # 明确不编译此文件

obj-- 条件编译     作用​​:根据配置变量动态决定编译方式
obj-$(CONFIG_NETWORK) += network.o

obj-m :=​​ 用于直接设置/重置模块列表
obj-m +=​​ 用于向现有列表添加新模块

Kconfig文件  菜单  辣椒炒肉

 Kconfig语法  

make menuconfig命令时,内核会去读取arch/ARCH/Kconfig, 所以需要将ARCH环境变量改为arm64,即平台架构

menu “菜单标题”   

        config 名字   #配置选项。

                bool “ 名字”   新选项  bool -> y和n  tristat y,m,n   string 字符串类型  

                default  默认

                        depends on 名字   #前面依赖后面。后面厉害    select 反过来,前面厉害

                choice #可选择项

                endchoice

                help “帮助信息”    #

                comment “用来做什么”    #Kconfig 使用comment用于注释,在图像化界面显示注释

endmenu

基本语法架构

.config  食材清单

deconfig文件和.config文件

内核的配置文件  deconfig文件在arch/$(ARCH)/configs目录下,  .config文件在内核源码的顶层目录下,编译内核使用.config配置
如果没有.config,使用deconfig配置

4.驱动编译内核过程

.helloworld字符编译,kernel下,因此使用单独编译kernel,单独烧录,过程如下


1.  驱动源码的字符设备路径下,新建目录,用来存放我的字符驱动hellworld.c
        内核kernel/drivers 路径   char/字符设备 路径下

        cp驱动程序hellworld.c 拷贝到字符设备目录下的新目录
         cp命令后面加一个点.表示将文件或目录复制到当前目录。这个点代表当前工作目录

        新建目录mkdir helloworld

2.新建目录下添加Kconfig,新建文件Kconfig
        Kconfig,图形化加一个菜单,touch新建Kconfig,新建一个菜单,vim Kconfig,用Kconfig语法

3.上一级目录Kconfig包含下一级目录的Kconfig
source “路径” 上一级目录下,打开vim Kconfig,包含下一级的 上一级Kconfig包含这个Kconfig

4. .config查看
回到kernel目录, make menuconfig,drives目录下的char字符设备目录,看自己的变量
查看变量没有,要在图形化界面保存,注意保存

5.Makefile 编译,Makefile 如果与图形化界面产生联系, 上一级vim .config里面有个变量,将这个变量写到Makefile   CONFIG_helloworld 变量
        5.1  在新目录helloworld下,新建vim Makefile,
        5.2  首先得找到变量。在kernel目录下查看.config, vim .config, 找到我的变量,如果没有,那就是第四步没有保存,
        5.3  接着需要将这个变量保存到我的新建的Makefile里面,vim Makefile
obj-$(变量)  += helloworld.o

        5.4 还需要将上一级的Makefile包含新的Makefile, 上一级vim Makefile
obj-y  +=helloworld/  目录形式,需要/

6.最后,kernel目录,需要将新的.config覆盖原来的deconfig

vim build.h  根目录   查看config是哪个,通常是默认的

找到deconfig路径,直接cp过去覆盖,覆盖前可以cp保存一下原来的

cp .config deconfig  将当前的.config覆盖默认的

7.验证:使用MobeXtermG工具

根目录下单独编译内核 kernel  ./build.sh kermel

编译烧录好,端口查看  

dmesg | grep “hello”

dmesg- 内核日志查看器    ​​功能​​:显示 Linux 内核环形缓冲区的内容

5.问题解决

1. make distclean  清空系统

2.Kernle目录下输入       export ARCH=arm64

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐