幸狐LuckFox Pico RV1103微型Linux开发板 上手教程分享—02:SDK 环境部署

news2024/11/13 10:57:25

                          续上01教程分享,今天主要分享Luckfox Pico SDK 的环境部署                            

LuckfoxPico-SDK是基于Ubuntu LTS 系统开发测试的,在开发过程中,主要是用Ubuntu 18.04版本, 为了不必要的麻烦,我们推荐用户使用Ubuntu18.04的电脑主机或者虚拟机。

SDK 环境部署 

一. 安装虚拟机软件​

  1. 下载VirtualBox虚拟机软件和VBoxGuestAdditions(全屏工具);

  2. 先安装VirtualBox-7.0.8-156879-Win(根据自己实际的版本安装),建议安装在固态硬盘上;

  3. 安装过程如下。

二. 创建新的虚拟机​

  1. 下载配置好的虚拟机文件(戳我下载);
  2. 单击“新建”以创建新的虚拟机,填写自定义名称,选择存储虚拟机的位置(建议虚拟机存储在固态硬盘上);

  3. 设置虚拟机的内存大小和处理器数量,建议为虚拟机提供大约 4GB 的 RAM和 4个 CPU以上。尽量保持在每个滑块的绿色区域,以防止同时运行虚拟机和主机操作系统的计算机出现问题;

  4. 使用已有的虚拟硬盘文件,未找到vdi文件点击add添加;

     

  5. 单击“下一步”继续并查看虚拟机设置的基本信息, 之后单击“完成”以初始化机器。

三. 安装VBoxGuestAdditions​

  1. 单击“开始”启动虚拟机。窗口的分辨率固定为 800x600;
  2. 点击虚拟机,点击设置,选择存储,选择choose a disk file...,选择Virtualbox GuestAdditions加载成功点击OK;

  3. 安装完VBoxGuestAdditions,为了防止Ubuntu虚拟机启动后黑屏,需要设置显存的大小,直接改到最大128M;

  4. 右键虚拟机桌面VBox_GAs—>Open in Terminal,在虚拟机中执行脚本。

四. 虚拟机的常规配置​

  1. 设置网络连接方式->桥接网卡;

  2. 启用USB3.0控制器;

  3. 设置Windows电脑与虚拟机的共享粘贴板。

五. 编译SDK​

  1. 启动虚拟机,虚拟机的登录密码是:luckfox;

  2. 安装相关依赖包(提供的虚拟机镜像已默认安装);

    sudo apt-get install repo git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk texinfo libssl-dev bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev pkg-config
    

  3. SDK文件默认存放在 Luckfox-Pico 文件夹下,如果想要最新的官方 SDK使用如下指令下载;

    luckfox@luckfox:~/luckfox$ git clone https://github.com/LuckfoxTECH/luckfox-pico.git
    Cloning into 'luckfox-pico'...
    remote: Enumerating objects: 110533, done.
    remote: Total 110533 (delta 0), reused 0 (delta 0), pack-reused 110533
    Receiving objects: 100% (110533/110533), 674.80 MiB | 133.00 KiB/s, done.
    Resolving deltas: 100% (16251/16251), done.
    Checking out files: 100% (107199/107199), done.
    

  4. 安装交叉编译工具链(提供的虚拟机镜像已默认安装);

    cd tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/
    source env_install_toolchain.sh
    
  5. 进入Luckfox-Pico 目录,查看目录下文件;

    luckfox@luckfox:~/Luckfox-Pico/luckfox-pico$ ls
    build.sh  media  project  readme_cn.txt  readme_en.txt  sysdrv  tools
    
  6. 编译选择分支,分别是指定 LuckFox Pico 和 LuckFox Pico Plus ;

    luckfox@luckfox:~/Luckfox-Pico/luckfox-pico$ ./build.sh lunch
    ls: cannot access 'BoardConfig*.mk': No such file or directory
    
    You're building on Linux
    Lunch menu...pick a combo:
    
    BoardConfig-*.mk naming rules:
    BoardConfig-"启动介质"-"电源方案"-"硬件版本"-"应用场景".mk
    BoardConfig-"boot medium"-"power solution"-"hardware version"-"applicaton".mk
    
    ----------------------------------------------------------------
    0. BoardConfig_IPC/BoardConfig-EMMC-NONE-RV1103_Luckfox_Pico-IPC.mk
                                 boot medium(启动介质): EMMC
                              power solution(电源方案): NONE
                            hardware version(硬件版本): RV1103_Luckfox_Pico
                                  applicaton(应用场景): IPC
    ----------------------------------------------------------------
    
    ----------------------------------------------------------------
    1. BoardConfig_IPC/BoardConfig-SPI_NAND-NONE-RV1103_Luckfox_Pico_Plus-IPC.mk
                                 boot medium(启动介质): SPI_NAND
                              power solution(电源方案): NONE
                            hardware version(硬件版本): RV1103_Luckfox_Pico_Plus
                                  applicaton(应用场景): IPC
    ----------------------------------------------------------------
    
    Which would you like? [0]: 1
    [build.sh:info] switching to board: /home/luckfox/Luckfox-Pico/luckfox-pico/project/cfg/BoardConfig_IPC/BoardConfig-SPI_NAND-NONE-RV1103_Luckfox_Pico_Plus-IPC.mk
    [build.sh:info] Running build_select_board succeeded.
    
  7. 全部编译镜像;

    luckfox@luckfox:~/Luckfox-Pico/luckfox-pico$ ./build.sh  
    ....
    Make firmware OK!
    ------ OK ------
    ********rkImageMaker ver 2.2********
    Generating new image, please wait...
    Writing head info...
    Writing boot file...
    Writing firmware...
    Generating MD5 data...
    MD5 data generated successfully!
    New image generated successfully!
    [mk-update_pack.sh:info] Making -RK1106 update.img OK.
    [build.sh:info] Running build_updateimg succeeded.
    [build.sh:info] Running build_firmware succeeded.
    [build.sh:info] Running build_all succeeded.
    save to /home/luckfox/Luckfox-Pico/luckfox-pico/IMAGE/SPI_NAND_RV1103G-LUCKFOX-PICO-PLUS.DTS_20230816.1811_RELEASE_TEST
    [build.sh:info] Running build_save succeeded.
    [build.sh:info] Running build_allsave succeeded.
    
  8. 编译成功后,固件存放在/home/Luckfox-Pico/luckfox-pico/output/image 目录下;

  9.  清除文件,方便重新编译,有一些配置文件修改后,需要执行这个命令后,在重新编译才能生效 。

    luckfox@luckfox:~/Luckfox-Pico/luckfox-pico$ ./build.sh clean             
    

六. 虚拟机文件共享​

虚拟机和 Windows 电脑之间文件传输可以使用 Samba 服务来实现文件共享,在 Windows 的网络邻居中,可以轻松访问虚拟机的文件系统,非常便捷,提供的虚拟机文件默认已经配置好 Samba 可以直接使用。

  1. 首先确保设置虚拟机网络桥连,查看虚拟机的 IP 地址;

    luckfox@luckfox:~/Luckfox-Pico/luckfox-pico$ ifconfig
    enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.10.61  netmask 255.255.252.0  broadcast 192.168.11.255
            inet6 fe80::814f:a51e:5f24:f0f7  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:d2:60:b9  txqueuelen 1000  (Ethernet)
            RX packets 699559  bytes 754875799 (754.8 MB)
            RX errors 0  dropped 4  overruns 0  frame 0
            TX packets 53024  bytes 3278048 (3.2 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 190  bytes 24144 (24.1 KB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 190  bytes 24144 (24.1 KB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

  2. 在 Windows 地址栏输入(根据自己实际 IP 地址填写);

  3. 输入虚拟机账户密码默认都是 luckfox ;

  4. 成功登录虚拟机。

七. 修改设备树​

如果购买的是LuckFox Pico Plus从 SD 卡启动,需要手动打开设备树网口:

  1. 进入 /luckfox/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts 目录下修改设备树文件。;

  2. 打开 rv1103g-luckfox-pico.dts 设备树文件,将 gmac 下的 “disable ”修改为“okay”,保存退出;

  3. 重新编译固件。

    ./build.sh clean  
    ./build.sh 
    

八. Linux下加载ko驱动模块​

(一)ko 文件简介​

在Linux操作系统中,.ko文件是内核模块文件的扩展名。内核模块是一种可以在运行时加载和卸载的代码,用于扩展Linux内核的功能,无需重新编译整个内核。每个.ko文件包含模块的代码和元数据,允许用户在不重新启动系统的情况下添加或移除特定功能,如驱动程序或文件系统支持。

(二)ko文件的优点

  1. 动态加载和卸载:内核模块可以在运行时动态加载到内核中,也可以随时卸载,无需重新启动系统。这使得系统管理员和开发人员能够在不中断系统运行的情况下添加、测试或修复功能;
  2. 节约资源:内核模块允许将不常用的功能作为模块加载,从而减少了系统内核的大小和内存占用,这有助于提高系统的资源利用率;
  3. 定制性: 内核模块允许用户根据需要添加或移除特定功能,从而实现定制化的系统。这对于嵌入式系统、特定硬件支持和特定应用场景非常有用;
  4. 减少编译时间: 重新编译整个内核可能会花费大量时间,而使用内核模块则可以避免这种情况。只需编译和加载所需的模块,节省了时间和资源。
  5. 快速调试和开发:内核模块可以在不重新启动系统的情况下加载和卸载,这使得驱动程序和其他内核代码的调试和开发变得更加高效。
  6. 易于维护: 内核模块的独立性使得它们可以独立于整个内核进行维护和升级。这有助于降低系统维护的复杂性。
  7. 增加兼容性:内核模块可以根据需要支持多个内核版本,从而增加了软件的兼容性和灵活性。

应用实例

下载工程文件戳我下载,整个工程只有两个文件,一个helloworld.c,一个用来控制编译的Makefile。

  1. 将工程文件复制到已经安装了编译通过的 Luckfox Pico SDK 的 Ubuntu 主机或虚拟机上。

  2. 打开、修改 Makefile 文件让 make 命令进入指定的内核源代码目录也就是 Luckfox Pico SDK 的内核路径。(提供的虚拟机镜像目录为/home/luckfox/Luckfox-Pico/luckfox-pico/sysdrv/source/kernel 。)

    obj-m += helloworld.o
    KDIR:=/home/luckfox/Luckfox-Pico/luckfox-pico/sysdrv/source/kernel
    PWD?=$(shell pwd)
    all:
        make -C $(KDIR) M=$(PWD) modules
        echo $(PWD)
    clean:
        rm -f *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order
    

  3. 代码部分:

    #include <linux/module.h>
    #include <linux/init.h>
    
    static int helloworld_init(void)
    {
        printk("helloworld!\n");
        return 0;
    }
    
    static void helloworld_exit(void)
    {
            printk("helloworld bye\n");
    }
    
    module_init(helloworld_init);
    module_exit(helloworld_exit);
    
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("Luckfox");
    MODULE_VERSION("V1.0");
    

    • 模块加载函数:当通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。 Linux内核模块加载函数一般以__init标识声明,模块加载函数以“module_init(函数名)”的形式被指定。它返回整型值,若初始化成功,应返回0。而在初始化失败时,应该返回错误编码。在Linux内核里,错误编码是一个接近于0的负值。
    • 模块卸载函数:当通过rmmod命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块卸载函数相反的功能。 Linux内核模块加载函数一般以__exit标识声明,模块卸载函数在模块卸载的时候执行,而不返回任何值,且必须以“module_exit(函数名)”的形式来指定。
    • 模块许可证声明许可证(LICENSE):明描述内核模块的许可权限,如果不声明LICENSE,模块被加载时,将收到内核被污染(Kernel Tainted)的警告。在Linux内核模块领域,可接受的LICENSE包括“GPL”、“GPL v2”、“GPLand additional rights”、“Dual BSD/GPL”、“Dual MPL/GPL”和“Proprietary”(关于模块是否可以采用非GPL许可权,如“Proprietary”,这个在学术界和法律界都有争议)。大多数情况下,内核模块应遵循GPL兼容许可权。Linux内核模块最常见的是以MODULE_LICENSE(“GPL v2”)语句声明模块采用GPL v2。
    • 模块作者等信息声明:MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_VERSION、MODULE_DEVICE_TABLE、MODULE_ALIAS分别声明模块的作者、描述、版本、设备表和别名
  4. 进入工程文件中,执行以下命令(其中CROSS_COMPILE的地址需要按SDK的实际路径填写):

    export ARCH=arm
    
    export CROSS_COMPILE=/home/luckfox/Luckfox-Pico/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-
    
    make
    

    效果如下:

  5.  把helloworld.ko上传到开发板上,可以使用TFTP,ADB等方式。

    tftp 192.168.10.127 -g -r helloworld.ko
    
  6. 执行以上命令可以进行验证。

    # insmod helloworld.ko
    [  200.330884] helloworld!
    # rmmod helloworld.ko
    [  218.624421] helloworld bye
    
  7. 最后我们使用 dmesg 查看日志。

    # dmesg | grep hello
    [  200.330884] helloworld!
    [  218.624421] helloworld bye

 如有更多分享,欢迎讨论~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1132825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

别再吹 GPT-4V 了!连北京烤鸭都不认识,你敢信??

夕小瑶科技说 原创 作者 | 智商掉了一地、ZenMoore GPT-4 被吹的神乎其神&#xff0c;作为具备视觉能力的 GPT-4 版本——GPT-4V&#xff0c;也被大众寄于了厚望。但如果告诉你&#xff0c;GPT-4V 连图片上的“北京烤鸭”和“广西烤鸭”都分不清楚&#xff0c;你是否觉得大跌眼…

电子邮件发送接收原理(附 go 语言实现发送邮件)

前言 首先要了解电子邮件的发送接收&#xff0c;不是点到点的。我想给你传达个消息&#xff0c;不是直接我跑到你家里喊你&#xff1a;“嘿&#xff0c;xxx&#xff0c;是你的益达&#xff0c;快拿走”。 而是类似快递的发送收取方式&#xff0c;是有服务器的中转的。我先将我…

1个月5次发版:测试人的模块测试策略分类归纳

笔者所在项目经历了一个月开发周期&#xff0c;该项目有5名开发人员&#xff0c;1名项目经理&#xff0c;1名测试人员&#xff0c;涵盖OA系统8个模块&#xff0c;在短短1个月中进行了5次发布。 现进行模块测试策略分类归纳。 已有模块 配置项优化 对于已有模块的配置项优化&…

【Python】collections.Counter

Python内置模块collections中的Counter是字典子类。Counter不是字典&#xff0c;但很像字典。 Counter具有字典的键和值&#xff0c;键是各个元素&#xff0c;值为该元素出现的次数。 Counter相当于计数器。常用于哈希映射&#xff08;哈希表&#xff09;。 from collection…

Unity Inspector编辑器扩展,枚举显示中文,枚举值自定义显示内容

记录&#xff01;Unity Inspector面板编辑器扩展&#xff0c;枚举显示中文&#xff0c;枚举值自定义显示内容&#xff0c;显示部分选项。效果如下&#xff1a; 枚举类代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public…

从顺序表表中删除具有最小值的元素(假设不唯一)并由函数返回被删元素值

从顺序表表中删除具有最小值的元素&#xff08;假设不唯一&#xff09;&#xff0c;并由函数返回被删元素值 空出的位置由最后一个元素填补&#xff0c;若顺序表为空&#xff0c;则显示出错误信息并退出运行 //顺序表定义及初始化 #define _CRT_SECURE_NO_WARNINGS #include&l…

SpringMVC Day 01:入门案例

前言 在我们的日常工作和学习中&#xff0c;Web 开发是一个无法回避的重要环节。而在 Java Web 开发领域&#xff0c;SpringMVC 无疑是一个重量级选手。它以其灵活性、强大功能和清晰的 MVC 结构&#xff0c;赢得了大量开发者的青睐。但是&#xff0c;对于初学者来说&#xff…

云表:【建议收藏】什么是低代码?一分钟掌握低代码开发

IT圈的风口总是轮番上演&#xff0c;但只有在浪潮退去后&#xff0c;真正具有社会价值的产品才能脱颖而出。同样地&#xff0c;这个规则也适用于“低代码”这个赛道。 云表平台认为&#xff0c;低代码将成为未来企业数字化转型中不可或缺的重要元素之一。随着市场竞争的不断加剧…

Qt 窗口的尺寸

本文通过多个案例&#xff0c;详细说明关于Qt窗体尺寸的一些重要问题 默认尺寸 对于一个Qt的窗口&#xff08;继承于QWidget&#xff09;&#xff0c;获取其窗体尺寸的方法size()&#xff1b; 以一个Qt创建Qt Widgets Application项目的默认生成代码为基础&#xff0c;做如下…

安科瑞电能计量管理系统

安科瑞 崔丽洁 随着国家电网改革政策的逐步推进和落实&#xff0c;Acrel-3000WEB电能管理解决方案运用互联网和大数据技术&#xff0c;为电力运维公司提供电能管理解决方案。该平台作为连接运维单位和用电企业的纽带&#xff0c;全方面监视用户配电系统的运行状态和电量数据&am…

分享一款基于 AI 的 Chrome 插件

最近使用大模型比较多&#xff0c;公司虽然提供了免费的 ChatGPT 但是需要跳转特定页面才能访问&#xff0c;比较麻烦&#xff0c;于是就想到是否可以开发一款类似于有道词典一样的 Chrome 插件&#xff0c;可以在任意页面使用&#xff0c;虽然市面上也有类似的插件&#xff0c…

2023中国物流系统集成商百强榜研究报告(附下载)

随着智能物流建设的不断深入&#xff0c;企业应用了越来越多的自动化、智能化物流设备与管理软件。但各物流功能之间的效益背反问题如何解决? 各品牌与类型物流设备的接口各异如何统一调度? 各物流设备与管理软件之间的数据如联通传输? 乃至物流设备与生产设备、物流管理软…

如何新建一个一台交换机下连两个PC的拓扑

文章目录 1.效果如下1.新建一个空白拓扑页选择设备类型向工作区添加设备如何选择链接线如何使设备之间链接上启动设备 1.效果如下 1.新建一个空白拓扑页 选择设备类型 向工作区添加设备 如何选择链接线 如何使设备之间链接上 同理右侧设备也是这样链接的 启动设备 同理PC1和P…

nohup命令后台启动jar包

使用jps命令查看后台启动的进程 kill -9 218729 杀掉进程&#xff0c;如果没有启动过就不用了&#xff0c;忘了的话就会有两个jar的进程&#xff0c;都杀掉然后重新启动jar包然后进入到jar包对应的目录下使用nohup命令启动jar包 命令&#xff1a;nohup java -jar xxx.jar >c…

轻量级仿 SpringBoot=嵌入式 Tomcat+SpringMVC

SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow&#xff0c;——这是怎么做到的&#xff1f;我们以 Tomcat 为例子&#xff0c;尝试调用嵌入式 Tomcat。 为了说明如何打造轻量级的 SpringBoot&#xff0c;本文分为“嵌入式 Tomcat”、“增强 SpringMVC”和“打包/部署”…

LDO基础知识

LDO基础知识 线性稳压器基本上由输入IN、输出OUT、GND引脚所构成 可变线性稳压器则在输出增加输出电压的反馈&#xff08;feed back&#xff09;引脚 (通过分压电阻来进行调节输出电压的大小) LDO 线性稳压器内部电路如下图所示。 基本上由误差放大器&#xff08;误差检测用…

行情分析——加密货币市场大盘走势(10.25)

目前大饼继续上涨&#xff0c;还没有看到震荡盘整的迹象。从MACD日线来看&#xff0c;连续绿色实心柱已经10天。现在有点上涨无力了&#xff0c;而现在入场做空性价比更高&#xff0c;看反弹到33000-32000。如果谨慎点&#xff0c;可以继续等待。 以太目前来看和大饼一样那个也…

MySQL中的Base64函数

编码函数to_base64() select to_base64("123") 解码函数from_base64() select from_base64("MTIz")

leetcode:1662. 检查两个字符串数组是否相等(python3解法)

难度&#xff1a;简单 给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。 示例 1&#xff1a; 输入&#xff1a;word1 […

AMS启动流程

本文均采用Android 14代码进行讲解&#xff0c;学习可以使用以下地址&#xff1a;Search 一、AMS启动流程 AMS的启动是在SyetemServer进程中启动的&#xff0c;从SyetemServer的main方法开始进入&#xff1a; 1.SystemServer.java main(String[] args) /*** The main entr…