导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    全志提供的交叉编译环境头文件的问题

    Linux
    3
    23
    7884
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • A
      Arnis LV 3 最后由 编辑

      不支持开发linux内核模块吗?,全志提供的交叉编译环境里找不到module.h kernel.h等头文件,怎么办?谢谢

      1 条回复 最后回复 回复 引用 分享 0
      • A
        Arnis LV 3 最后由 编辑

        用的是Core-T113-S3 核心板光盘资料提供的虚拟机,里面说已经装好了编译环境,然后想做一个LINUX内核模块驱动,编译找不到头文件。代码里头文件如下:
        #include <linux/module.h>
        #include <linux/kernel.h>
        #include <linux/fs.h>
        #include <linux/tty.h>
        #include <linux/sched.h>
        #include <linux/net.h>
        #include <sys/socket.h>
        #include <sys/select.h>
        #include <termios.h>
        #include <fcntl.h>
        #include <linux/in.h>
        #include <semaphore.h>
        #include <pthread.h>

        1 条回复 最后回复 回复 引用 分享 0
        • A
          Arnis LV 3 最后由 编辑

          好像这个全志提供的虚拟机不是内核开发版的。怎么办啊?

          1 条回复 最后回复 回复 引用 分享 0
          • A
            Arnis LV 3 最后由 编辑

            用的是全志提供的虚拟机,安装好的编译环境,可是他这个交叉编译环境好像不支持内核开发,他的交叉编译工具链sysroot下的头文件里没有上面我列出的内核开发支持头文件。

            N 1 条回复 最后回复 回复 引用 分享 0
            • N
              NULL037 LV 7 @Arnis 最后由 编辑

              @arnis 那个虚拟机?你使用的是那个版本的SDK?

              1 条回复 最后回复 回复 引用 分享 0
              • A
                Arnis LV 3 最后由 编辑

                talowe-t113-linux-sdk_2023_11_10.tar

                N 1 条回复 最后回复 回复 引用 分享 0
                • A
                  Arnis LV 3 最后由 编辑

                  Core-T113-S3 核心板光盘资料,这上面的虚拟机,里面交叉工具链好像不支持内核模块开发

                  1 条回复 最后回复 回复 引用 分享 0
                  • N
                    NULL037 LV 7 @Arnis 最后由 编辑

                    @arnis 这个姚望提供的SDK吧,你去问问他们的技术支持吧

                    1 条回复 最后回复 回复 引用 分享 0
                    • A
                      Arnis LV 3 最后由 编辑

                      MCU 是 T113-S3, 能不能提供个开发环境支持LINUX内核开发?

                      1 条回复 最后回复 回复 引用 分享 0
                      • A
                        Arnis LV 3 最后由 编辑

                        你是MCU原厂商,你们不能提供个T113-S3支持LINUX开发的交叉编译环境吗?我去问核心板封装厂商能提供这个计数支持吗?

                        1 条回复 最后回复 回复 引用 分享 0
                        • A
                          awwwwa LV 8 最后由 awwwwa 编辑

                          上面那个就是Linux开发环境,找不到头文件因为没有指定Kernel的头文件目录。或者没有在目标板Linux系统上做开发,没有正确配置交叉编译工具链,没有正确配置目标Kernel的引用。

                          对于驱动开发可以参考:
                          https://v853.docs.aw-ol.com/soft/dev_gpio/

                          T113没有IDE开发环境,Linux也不能使用Keil,IAR开发,需要学习Linux的新的开发方法

                          1 条回复 最后回复 回复 引用 分享 0
                          • A
                            Arnis LV 3 最后由 编辑

                            我怎么想的是,如果交叉编译工具链下没有module.h文件,那这个编译环境就不支持内核模块开发,配置没什么可调整的,我想全志提供一个支持LINUX内核模块开发的工具链,或者我可以再核心板厂商那里得到这个工具链吗?

                            A 1 条回复 最后回复 回复 引用 分享 0
                            • A
                              awwwwa LV 8 @Arnis 最后由 awwwwa 编辑

                              @arnis 本来就是支持的,只是你配置错误了,makefile怎么写的?

                              1 条回复 最后回复 回复 引用 分享 0
                              • A
                                Arnis LV 3 最后由 编辑

                                麻烦提供一个针对交叉工具链的Makefile模板,谢谢

                                A 1 条回复 最后回复 回复 引用 分享 0
                                • A
                                  Arnis LV 3 最后由 编辑

                                  那个虚拟机LINUX内核源码里是有module.h的,抱歉我新手对交叉工具链编译makefile里包含目录的配置不是很了解,那个交叉工具链安装目录下是有自己的linux头文件支持的,里面没有module.h, 这个和LINUX内核源码的头文件怎么配合使用,在makefile里如何设置不是很清楚,麻烦给个具体实现。

                                  1 条回复 最后回复 回复 引用 分享 0
                                  • A
                                    awwwwa LV 8 @Arnis 最后由 awwwwa 编辑

                                    @arnis

                                    obj-m  := hello.o
                                    KERNEL := ../lichee/linux-5.4/
                                    PWD    := $(shell pwd)
                                    
                                    modules :
                                            $(MAKE) -C $(KERNEL) M=$(PWD) modules
                                    
                                    .PHONEY:clean
                                    clean :
                                            rm -f *.o *.ko
                                    

                                    这是一个基本的内核模块Makefile。下面是各个变量和命令的含义:

                                    obj-m  := hello.o
                                    

                                    定义要编译的内核模块的目标文件名为hello.o。这里使用了obj-m变量,它是一个特殊的变量,用于编译内核模块。

                                    KERNEL := ../lichee/linux-5.4/
                                    

                                    定义内核源代码目录的位置,这里是../lichee/linux-5.4/。根据实际情况修改该路径。

                                    PWD    := $(shell pwd)
                                    

                                    定义当前目录的路径为PWD。这里使用了shell命令来获取当前目录的路径。

                                    modules :
                                            $(MAKE) -C $(KERNEL) M=$(PWD) modules
                                    

                                    定义一个名为modules的伪目标,它的依赖关系为空。执行该目标时,会进入内核源代码目录$(KERNEL),并使用M=$(PWD)选项告诉内核Makefile,模块源代码在当前目录中。最后执行modules目标,编译内核模块。

                                    .PHONEY:clean
                                    clean :
                                            rm -f *.o *.ko
                                    

                                    定义一个伪目标clean,它的依赖关系为空。执行该目标时,会删除当前目录下的所有.o和.ko文件。

                                    如果需要编译多个内核模块,可以将obj-m变量中的目标文件名替换为多个目标文件名,如obj-m := hello.o world.o another.o。此外,还可以在Makefile中定义其他命令,比如安装、卸载等命令,以更方便地管理内核模块。

                                    编译指令如下:

                                    make ARCH=arm CROSS_COMPILE=$(pwd)/../prebuilt/gcc/linux-x86/arm/toolchain-sunxi-glibc/toolchain/bin/arm-openwrt-linux-gnueabi-
                                    

                                    这是一个编译ARM架构的程序的Makefile命令。下面是各个参数的含义:

                                    ARCH=arm
                                    

                                    指定目标架构为ARM。

                                    CROSS_COMPILE=$(pwd)/../prebuilt/gcc/linux-x86/arm/toolchain-sunxi-glibc/toolchain/bin/arm-openwrt-linux-gnueabi-
                                    

                                    指定交叉编译器的路径及前缀。这里使用了$(pwd)变量获取当前工作目录的路径,并拼接上交叉编译器的路径及前缀。根据实际情况修改该路径。

                                    使用交叉编译器可以在x86主机上编译ARM平台的程序。arm-openwrt-linux-gnueabi-是交叉编译器的前缀,表示编译出来的可执行文件适用于OpenWrt系统。

                                    在执行该命令之前,需要确保已经安装了相应的交叉编译工具链,并将其加入环境变量中。如果没有安装,请参考相关文档进行安装。

                                    A 1 条回复 最后回复 回复 引用 分享 1
                                    • A
                                      Arnis LV 3 最后由 编辑

                                      CC [M] /home/talowe/hpm/ctrlBoard.o
                                      In file included from ./include/asm-generic/int-ll64.h:11:0,
                                      from ./arch/arm/include/uapi/asm/types.h:5,
                                      from ./include/uapi/linux/types.h:5,
                                      from ./include/linux/types.h:6,
                                      from ./include/linux/list.h:5,
                                      from ./include/linux/module.h:9,
                                      from /home/talowe/hpm/ctrlBoard.c:1:
                                      ./include/uapi/asm-generic/int-ll64.h:12:10: fatal error: asm/bitsperlong.h: No such file or directory
                                      #include <asm/bitsperlong.h>

                                      已经设置了Makefile, make的结果是有头文件找不到,但是在/usr/src/linux-headers-4.15.0-142/include/asm-generic
                                      下是有这个头文件的,但是他不在asm/下,怎么设置解决这个问题?谢谢

                                      1 条回复 最后回复 回复 引用 分享 0
                                      • A
                                        Arnis LV 3 最后由 编辑

                                        ./include/uapi/asm-generic/int-ll64.h:12:10: fatal error: asm/bitsperlong.h: No such file or directory
                                        #include <asm/bitsperlong.h>
                                        发现LINUX源码arch下的arm里没有这个头文件, arm64下的有,如果在内核顶层的Makefile的LINUXINCLUDE宏中少加入了-I$(srctree)/arch/$(SRCARCH)/include/uapi \路径(在这个路径下呢),加入后改为编译arch=arm64,又有错误arm-linux-gnueabi-gcc: error: unrecognized command line option ‘-mgeneral-regs-only’

                                        1 条回复 最后回复 回复 引用 分享 0
                                        • A
                                          Arnis LV 3 @awwwwa 最后由 编辑

                                          @awwwwa 设置了Makefile编译,出错:./include/uapi/asm-generic/int-ll64.h:12:10: fatal error: asm/bitsperlong.h: No such file or directory
                                          #include <asm/bitsperlong.h>
                                          发现LINUX源码arch下的arm里没有这个头文件, arm64下的有,如果在内核顶层的Makefile的LINUXINCLUDE宏中少加入了-I$(srctree)/arch/$(SRCARCH)/include/uapi \路径(在这个路径下呢),加入后改为编译arch=arm64,又有错误arm-linux-gnueabi-gcc: error: unrecognized command line option ‘-mgeneral-regs-only’。请帮忙看看,谢谢

                                          1 条回复 最后回复 回复 引用 分享 0
                                          • A
                                            Arnis LV 3 最后由 编辑

                                            我安装的工具链只有arm-linux-gnueabi-gcc,没有aarch64-none-linux-gnu,这个情况不能进行arch=arm64编译吧?

                                            A 1 条回复 最后回复 回复 引用 分享 0
                                            • A
                                              awwwwa LV 8 @Arnis 最后由 编辑

                                              @arnis 请使用SDK中提供的工具链,路径

                                              prebuilt/gcc/linux-x86/arm/toolchain-sunxi-glibc/toolchain/bin/arm-openwrt-linux-gnueabi-

                                              A 2 条回复 最后回复 回复 引用 分享 0
                                              • A
                                                Arnis LV 3 @awwwwa 最后由 编辑

                                                @awwwwa 我安装的工具链里只有arm-linux-gnueabi-gcc,没有aarch64-linux-gnu,也没有你说的这个,因为那个头文件只在arch/arm64下有,我要设置arch=arm64,不用aarch64-linux-gnu恐怕不行吧?

                                                1 条回复 最后回复 回复 引用 分享 0
                                                • A
                                                  Arnis LV 3 @awwwwa 最后由 编辑

                                                  @awwwwa 我拿到的SDK工具链只有arm-linux-gnueabi-gcc

                                                  1 条回复 最后回复 回复 引用 分享 0
                                                  • 1 / 1
                                                  • First post
                                                    Last post

                                                  Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                                                  行为准则 | 用户协议 | 隐私权政策