精华内容
下载资源
问答
  • 今天小编就为大家分享一篇关于linux下搭建scala环境并个简单的scala程序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 实际产品中使用,通过linux的spidev方式进行spi通信,内带api以及spi flash的读写spi和测试程序
  • linux如何python程序

    千次阅读 2020-12-22 10:54:11
    linux下有多种方式运行python:1. 命令行执行:建立一个*.py文档,其中书写python代码。之后,命令行执行:$python*.py注意事项:(1)需要指明文件的绝对路径;(2)源代码中要指明输出,比如print相关推荐:...

    linux下有多种方式运行python:

    1. 命令行执行:

    建立一个*.py文档,在其中书写python代码。之后,在命令行执行:$ python *.py

    注意事项:

    (1)需要指明文件的绝对路径;

    (2)源代码中要指明输出,比如print

    相关推荐:《Python基础教程》

    2. UNIX脚本:

    在建立*.py文件后,需要在源代码头部添加python的执行路径,比如"#! /usr/bin/python"。其中,"#!"被称为"hash bang"。之后,先更改文本权限为可执行文件,再执行即可:$ chmod +x *.py

    $ ./*.py

    注意事项:

    (1)如果找不到python执行路径,输入$ which python查看;

    (2)另一种更适用的方法是,添加env程序,自动寻找python路径,比如将第一行改写为"#! /usr/bin/env python"。这种方法便于程序的跨平台执行,但是前提要保证env的路径;如果不知道env路径,输入$ which env查看。

    3. 模块载入与重载:

    模块(module):一群变量名的封装,一个模块对应这一个单独的“命名空间”。载入模块后,通过object.attribute访问对象。可以把一个模块理解成一个“包(package)”,这样做的好处就是:把处理同一个问题的所有代码打包,方便反复使用。python提供的模块概念,很好地解决了重复变量名的问题,因为即使变量名相同,因为模块名不同,所以仍然可以区分(很像R语言中的“双冒号”操作符,package::function)。

    载入:import mymoduel或者from mymodule import object;另一种方法使用execfile('mymodule.py')。

    重载:使用load()函数,比如load(mymodule)。

    注意事项:

    (1)import/from/load()都不需要指明模块后缀,这也暗示着模块需要在当前运行目录下;

    (2)import/from之后,再次import/from不起作用。同样,修改该模块后import/from(第二次)也没有。这是,需要用load()载入。execfile()不存在这个问题。

    4. 最爽的做法:

    emacs中配置python运行环境。

    展开全文
  • linux下QT编写的连接wifi程序,可以扫描连接WIFI,测试使用的是Ubuntu16.04,比较简单。
  • 在Linux下写一个简单的驱动程序

    千次阅读 多人点赞 2018-10-09 10:09:13
    本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程。相信这样由浅入深、由具体实例到抽象理论的描述更容易初学者入手Linux驱动的大门。 ...

      本文首先描述了一个可以实际测试运行的驱动实例,然后由此去讨论Linux下驱动模板的要素,以及Linux上应用程序到驱动的执行过程。相信这样由浅入深、由具体实例到抽象理论的描述更容易初学者入手Linux驱动的大门。

    一、一个简单的驱动程序实例

    驱动文件hello.c

    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/fs.h>
    #include <linux/init.h>
    #include <linux/delay.h>
    
    #define    HELLO_MAJOR     231
    #define    DEVICE_NAME     "HelloModule"
    
    static int hello_open(struct inode *inode, struct file *file){
        printk(KERN_EMERG "hello open.\n");
        return 0;
    }
    
    static int hello_write(struct file *file, const char __user * buf, size_t count, loff_t *ppos){
        printk(KERN_EMERG "hello write.\n");
        return 0;
    }
    
    static struct file_operations hello_flops = {
        .owner  =   THIS_MODULE,
        .open   =   hello_open,     
        .write  =   hello_write,
    };
    
    static int __init hello_init(void){
        int ret;
        
        ret = register_chrdev(HELLO_MAJOR,DEVICE_NAME, &hello_flops);
        if (ret < 0) {
          printk(KERN_EMERG DEVICE_NAME " can't register major number.\n");
          return ret;
        }
        printk(KERN_EMERG DEVICE_NAME " initialized.\n");
        return 0;
    }
    
    static void __exit hello_exit(void){
        unregister_chrdev(HELLO_MAJOR, DEVICE_NAME);
        printk(KERN_EMERG DEVICE_NAME " removed.\n");
    }
    
    module_init(hello_init);
    module_exit(hello_exit);
    MODULE_LICENSE("GPL");

      驱动文件主要包括函数hello_open、hello_write、hello_init、hello_exit,测试案例中并没有赋予驱动模块具有实际意义的功能,只是通过打印日志的方式告知控制台一些调试信息,这样我们就可以把握驱动程序的执行过程。

      在使用printk打印的时候,在参数中加上了“KERN_EMERG”可以确保待打印信息输出到控制台上。由于printk打印分8个等级,等级高的被打印到控制台上,而等级低的却输出到日志文件中。

    编译驱动所需的Makefile

    ifneq ($(KERNELRELEASE),)
    MODULE_NAME = hellomodule
    $(MODULE_NAME)-objs := hello.o
    obj-m := $(MODULE_NAME).o
    else
    KERNEL_DIR = /lib/modules/`uname -r`/build
    MODULEDIR := $(shell pwd)
    
    .PHONY: modules
    default: modules
    
    modules:
        make -C $(KERNEL_DIR) M=$(MODULEDIR) modules
    
    clean distclean:
        rm -f *.o *.mod.c .*.*.cmd *.ko
        rm -rf .tmp_versions
    endif

      编译驱动文件需要一个合适的makefile,因为编译驱动的时候需要知道内核头文件,编译规则等。

    测试驱动的上层应用代码hellotest.c

    #include <fcntl.h>
    #include <stdio.h>
    
    int main(void)
    {
        int fd;
        int val = 1;
        fd = open("/dev/hellodev", O_RDWR);
        if(fd < 0){
            printf("can't open!\n");
        }
        write(fd, &val, 4);
        return 0;
    }

      上层测试案例中,首先打开设备文件,然后向设备中写入数据。如此,则会调用驱动中对应的xxx_open和xxx_write函数,通过驱动程序的打印信息可以判断是否真的如愿执行了对应的函数。

    二、驱动实例测试

      测试的方法整体来说就是,编译驱动和上层测试应用;加载驱动,通过上层应用调用驱动;最后,卸载驱动。

    1、编译驱动

    #make

      make命令,直接调用Makefile编译hello.c,最后会生成“hellomodule.ko”。

    2、编译上层应用

    #gcc hellotest.c -o hellotest

      通过这条命令,就能编译出一个上层应用hellotest。

    3、加载驱动

    #insmod hellomodule.ko

      insmod加载驱动的时候,会调用函数hello_init(),打印的调试信息如下。

      此外,在"/proc/devices"中可以看到已经加载的模块。

    4、创建节点

      虽然已经加载了驱动hellomodule.ko,而且在/proc/devices文件中也看到了已经加载的模块HelloModule,但是这个模块仍然不能被使用,因为在设备目录/dev目录下还没有它对应的设备文件。所以,需要创建一个设备节点。

    #mknod /dev/hellodev c 231 0

      在/proc/devices中看到HelloModule模块的主设备号为231,创建节点的时候就是将设备文件/dev/hellodev与主设备号建立连接。这样在应用程序操作文件/dev/hellodev的时候,就会定位到模块HelloModule。

    /proc/devices 与 /dev的区别

    • /proc/devices中的设备是驱动程序生成的,它可产生一个major供mknod作为参数。这个文件中的内容显示的是当前挂载在系统的模块。当加载驱动HelloModule的时候,并没有生成一个对应的设备文件来对这个设备进行抽象封装,以供上层应用访问。
    • /dev下的设备是通过mknod加上去的,用户通过此设备名来访问驱动。我以为可以将/dev下的文件看做是硬件模块的一个抽象封装,Linux下所有的设备都以文件的形式进行封装。

    5、上层应用调用驱动

    #./hellotest

      hellotest应用程序先打开文件“/dev/hellodev”,然后向此文件中写入一个变量val。期间会调用底层驱动中的hello_open和hello_write函数,hellotest的运行结果如下所示。

    6、卸载驱动

    #rmmod hellomodule

      insmod卸载驱动的时候,会调用函数hello_exit(),打印的调试信息如下。

    总结一个模块的操作流程:

      (1)通过insmod命令注册module

      (2)通过mknod命令在/dev目录下建立一个设备文件"xxx",并通过主设备号与module建立连接

      (3)应用程序层通过设备文件/dev/xxx对底层module进行操作

    三、驱动模板

      从宏观上把握了驱动程序的框架,然后再从细节上完善驱动的功能,这是开发驱动程序的一般步骤。驱动模板必备要素有头文件、初始化函数、退出函数、版权信息,常用的扩展要素是增加一些功能函数完善底层驱动的功能。

    1、头文件

    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/fs.h>
    #include <linux/init.h>
    #include <linux/delay.h>

    init.h     定义了驱动的初始化和退出相关的函数
    kernel.h     定义了经常用到的函数原型及宏定义
    module.h   定义了内核模块相关的函数、变量及宏

    2、初始化函数

    static int __init hello_init(void){
        int ret;
        ret = register_chrdev(HELLO_MAJOR,DEVICE_NAME,&hello_flops);
        if (ret < 0) {
              printk(KERN_EMERG DEVICE_NAME " can't register major number.\n");
              return ret;
        }
        printk(KERN_EMERG DEVICE_NAME " initialized.\n");
        return 0;
    }
    module_init(hello_init);

     

      当加载驱动到内核的时候,这个初始化函数就会被自动执行。

      初始化函数顾名思义是用来初始化模块的,常用的功能是通过register_chrdev来注册函数。内核分配了一块内存(数组)专门用来存放字符设备的函数集,register_chrdev函数会在这个数组的HELLO_MAJOR位置将hello_flops中的内容进行填充,也就是将HelloModule的功能函数地址注册到设备管理内存集中。

      形象的比喻好像是操作系统提供了很多的衣服架,注册设备就好像是把一个衣服挂到某一个衣服架上。衣服上有许多口袋,就好像每一个模块有许多功能程序接口。显然,如果想使用设备的某个功能,就可以先找到对应的衣服架,然后找到相应的口袋,去调用对应的函数,执行动作。

    3、退出函数

    static void __exit hello_exit(void){
        unregister_chrdev(HELLO_MAJOR, DEVICE_NAME);
        printk(KERN_EMERG DEVICE_NAME " removed.\n");
    }
    module_exit(hello_exit);

      当卸载驱动的时候,退出函数便会自动执行,完成一些列清楚工作。

      在加载驱动的时候,我们向设备管理内存集中注册了该模块的相关功能函数。当卸载驱动的时候,就有必要将这个模块占用的内存空间清空。这样当其他的设备注册的时候便有更多的空间可以选择。

      形象的比喻是, 当卸载驱动的时候,就是把衣服从衣服架上取下来,这样衣服架就腾空了。

    4、版权信息

    MODULE_LICENSE("GPL");

      Linux内核是按照GPL发布的,同样Linux的驱动程序也要提供版权信息,否则当加载到内核中系统会给出警告信息。

    5、功能函数

    static int hello_open(struct inode *inode, struct file *file){
        printk(KERN_EMERG "hello open.\n");
        return 0;
    }
    
    static int hello_write(struct file *file, const char __user * buf, size_t count, loff_t *ppos){
        printk(KERN_EMERG "hello write.\n");
        return 0;
    }
    
    static struct file_operations hello_flops = {
        .owner  =   THIS_MODULE,
        .open   =   hello_open,     
        .write  =   hello_write,
    };

     

      功能函数虽然不是一个驱动模板所必须的,但是一个有实际意义的驱动程序一定包含功能函数。功能函数实际上定义了这个驱动程序为用户提供了哪些功能,也就是用户可以对一个硬件设备可以进行哪些操作。
      常见的功能函数有xxx_open()、xxx_write()、xxx_read()、xxx_ioctl()、xxx_llseek()等。当上层应用调用open()、write()、read()、ioctl()、llseek()等这些函数的时候,经过层层调用最后到达底层,调用相应的功能函数。结构体file_operations中的成员定义了很多函数,实际应用可以只对其部分成员赋值,其定义如下。

     View Code

    四、从上层应用到底层驱动的执行过程

     1、Linux系统的分层结构

      Linux系统的分层结构为:应用层 ----> 库 ----> 内核 ----> 驱动程序 ----> 硬件设备。

    2、从上层应用到底层驱动的执行过程

      以“open("/dev/hellodev", O_RDWR)”函数的执行过程为例来说明。

    (1)应用程序使用库提供的open函数打开代表hellodev的设备文件。

    (2)库根据open函数传入的参数执行swi指令,这条指令会引起CPU异常,从而进入内核。

    (3)内核的异常处理函数根据这些参数找到相应的驱动程序。

    (4)执行相应的驱动程序。

    (5)返回一个文件句柄给库,进而返回给应用程序。

     3、驱动程序的执行特点

      与应用程序不同,驱动程序从不主动运行,它是被动的:根据应用程序的要求进行初始化,根据应用程序的要求进行读写。驱动程序加载进内核,只是告诉内核“我在这里,我能做这些工作”,至于这些工作何时开始,则取决于应用程序。

      驱动程序运行于“内核空间”,它是系统“信任”的一部分,驱动程序的错误有可能导致整个系统的崩溃。

     

    参考资料:

                 linux驱动开发框架

         《嵌入式Linux应用开发完全手册》

    展开全文
  • linux下用vi命令写程序

    千次阅读 2019-03-29 11:49:57
    目录创建一个用于测试的文本文件(touch filename).我这里就新建了一个test文本文件.当然这个名字是可以随便取得. 二:用"vi test"命令进入vi命令行模式(vi filename). 如果要想编辑文本文件.必须要转换到插入...
    一:首先进入Linux的命令行界面.在目录下创建一个用于测试的文本文件(touch filename).我这里就新建了一个test文本文件.当然这个名字是可以随便取得.

    在这里插入图片描述

    二:用"vi test"命令进入vi命令行模式(vi filename). 如果要想编辑文本文件.必须要转换到插入模式下,也就是按一下键盘上的"i"就可以了.这样你就可以编辑文本,删除文本中的内容.按键盘上的上下左右键.来回移动了.就跟你在windows 系统中编辑文本一样.

    小贴士:vi的工作模式共有三种:普通模式、编辑模式和命令模式。掌握几种模式的切换是很重要的。参考来源

    shell进入的就是普通模式,此时你的任何输入都不会显示在屏幕上,只会当做命令来解释,而且也无需输入回车,命令就会立即执行。当然如果你输入的命令不对,vi不会有任何动作。
    我们可以移动光标、进行复制删除等操作。
    在这里插入图片描述

    在这里插入图片描述

    三:输入你要输入的内容.如果你想退出文本编辑模式.并且保存刚刚编辑的文本.首先点击一下键盘上的"ESC",然后输入":wq!“这样就将文本保存了.然后推出了vi编辑器.如果不想保存就按一下键盘上的"ESC”,输入":q!".如果你不确定是否成功.可以通过"cat filename" 命令来查看.

    在这里插入图片描述

    退出时,点esc键,然后打“:wq” , 这个是保存并退出的意思;
    在这里插入图片描述

    原文转自:https://jingyan.baidu.com/album/59703552e2e1e38fc107405a.html?picindex=1

    展开全文
  • 在linux操作系统下写c++程序

    千次阅读 2018-05-13 11:22:12
    我们知道windows编译并执行c++程序,只需要一个合适的集编辑,编译,连接执行为一体的多功能软件就可以完成整个过程。国内用的比较多的软件有visual studio(版本现已更新到2017)初学者也可以考虑visual c++6.0...

    我们知道在windows下编译并执行c++程序,只需要一个合适的集编辑,编译,连接执行为一体的多功能软件就可以完成整个过程。国内用的比较多的软件有visual studio(版本现已更新到2017)初学者也可以考虑visual c++6.0;本章我们主要讨论在如何linux系列操作系统中如何使用shell进行c++程序的编写以及执行。
    类比于写一个运行在windows平台的c++应用程序,在linux终端下首先也要创建一个后缀名为.cpp的文件用来存放你的主要代码。
    使用touch命令touch test.cpp 再ls一下会看到你的文件夹里多了一个名为test.cpp的文件。
    vim test.cpp
    进入文件内编写你的代码程序

    #include<iostream>
      2 using namespace std;
      3 class Time{
      4 private:
      5     int hour;
      6     int minute;
      7     int second;
      8 public:
      9     void set(int h,int m,int s);
     10     void print();
     11 };
     12 void Time::set(int h,int m,int s)
     13     { hour=h;minute=m;second=s;}
     14 void Time::print()
     15     {cout<<hour<<"/"<<minute<<"/"<<second<<endl;}
     16 int main()
     17 {   Time a,b;
     18     a.set(10,12,50);
     19     a.print();
     20     b.set(12,10,40);
     21     b.print();
     22     return 0;
     23 }

    保存退出

    使用gcc编译你所写的程序gcc test.cpp 这个时候系统会默认生成一个名为a.out的文件在你的当前目录下。若想指定一个你所喜欢的文件名可以使用-o

    gcc test.cpp -o 后面加你想生成的文件名。

    如果编译通过的话证明你所写的程序是没有bug的

    运行一下 ./a.out

    ok.

    展开全文
  • 如何在linux下开发java程序

    千次阅读 2020-06-22 16:07:26
    如何在linux下开发java程序,或者更具体一点在linux开发java SDK, 首先明确一下几点 开发工具 如果编译 如何运行 如果单侧 开发工具 编辑器: 可以直接安装PowerVim,这里开发工具已经配置好了 PowerVim主要做...
  • 第一步: 安装mingw sudo apt-get install mingw32 mingw32-binutils ...第二部: 编写纯c程序代码通过GCC/CC编译调试,用mingw输出win目标文件 i586-mingw32msvc-gcc1.c -o 1.exe mingw相关命令 C compiler: i586-m...
  • 在linux下编写简单的c程序

    万次阅读 多人点赞 2018-03-19 11:51:29
    最近开始学习linux编程,对于linux的命令,却还不特别熟悉,此记录一下,学习linux的一些命令首先ctrl+alt+t打开终端,然后使用vim进行编程 vim hello.c hello.c中 按 i 或者 insert 输入以下内容输入完成后...
  • 如何在Linux上编写和运行程序

    千次阅读 2020-07-20 00:54:41
    在Linux上编写和运行程序 第1步:安装build-essential软件包 在Linux终端中以root用户身份输入以下命令: sudo apt-get install build-essential 第2步:编写一个简单的C程序 打开Ubuntu的图形文本编辑器,将以下...
  • 个人在linux下用GTK的模仿QQ聊天程序,包含客户一个服务器一个客户端,有私聊,发送系统消息,聊天记录,发送文件,发送电子邮件,用到的知识:C/C++,GTK,MYSQL,SOCKET,多线程,本程序仅用于学习交流,站...
  • linux下自己的usb鼠标驱动程序,编译加载后,能实现识别鼠标,和usb鼠标通信
  • 如何在LinuxC代码

    千次阅读 多人点赞 2020-09-23 23:48:56
    第一步: 在Linux桌面中键盘按Ctrl + AIt + T 打开命令口终端 第二步: 输入命令vi dmoe.c 进入vi的命令行模式并创建一个文件名为“dome.c” 的C文件 第三步: 输入命令 i(下方出现 --INSERT-- 的字符...
  • 在Linux下运行你的第一个汇编程序

    万次阅读 2020-02-21 12:40:34
    在Linux下运行你的第一个汇编程序 汇编语言对于大多数程序员来说都是进而远之的,原因当然是汇编语言晦涩难懂,各种指令搞得人头疼,不过汇编语言适当了解一些还是蛮有意思的,今天带大家在Linux上运行第一个汇编...
  • GBD(linux下程序调试).pdf

    热门讨论 2011-10-24 15:48:28
    linux下的gdb使用方法,教你如何在linux下进行程序调试 linux下的gdb使用方法,教你如何在linux下进行程序调试 linux下的gdb使用方法,教你如何在linux下进行程序调试 linux下的gdb使用方法,教你如何在linux下进行...
  • 如何在Linux终端编写并执行c语言程序

    千次阅读 多人点赞 2021-02-03 11:58:14
    1,使用vim编辑器编写程序,可终端输入命令:sudo apt-get install vim 下载最新vim 2,需要下载c语言的编译器gcc,终端输入命令:sudo apt-get install gcc 下载gcc 3,使用vi非常的简单,命令 # vi ...
  • C语言是嵌入式开发中永远回避不了的...因为我们平时的都是些小程序,就算申请的内存没有释放,也不会影响程序结果,所以很少会关注内存泄漏的问题。但是如果把这个问题放在商用的项目中,就会是一个不小的隐患。...
  • 在Linux(Ubuntu版)编写运行C语言程序

    万次阅读 多人点赞 2018-02-21 21:16:42
    最初学习C语言用的是Visual C++6.0,后来...本章主要介绍在Linux的终端编写C程序并编译运行。一,编写C时需要掌握的一些Linux操作(1)文件管理相关的命令Linux命令名称作用使用举例mkdir新建文件夹mkdir test,m...
  • 如何在linux终端编写C++应用程序

    千次阅读 2017-09-17 11:47:54
    我们知道windows编译并执行c++程序,只需要一个合适的集编辑,编译,连接执行为一体的多功能软件就可以完成整个过程。国内用的比较多的软件有visual studio(版本现已更新到2017)初学者也可以考虑visual c++6.0...
  • 在Linux编写C程序(非常详细)

    千次阅读 2019-10-06 23:20:11
    用gcc编译器编写C程序(持续更新) 创建一个C文件 我用的是vim,例如创建一个cna.c, 执行 vim cna.c 这里默认是根目录,如果你要存在其它地方加上相应的路径名, 编写代码 完代码之后,我们要做一件事,...
  • 由于项目要求Qt的程序实现开机自动启动功能,本人找了很多网站测试后都实现不了,最后找到了一个成功的,这里分享一下。 首先说一下我自己的配置:Ubuntu 16.04 ,Qt4.5.0(项目要求,经...2.该文件夹创建一个
  • 在Linux下开发GUI程序的方法

    万次阅读 2018-07-18 16:10:24
    在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的Swing/AWT组件也可以用于开发Linux下...
  • Linux下编写C程序helloWorld

    千次阅读 2019-01-08 15:39:28
    本文简单记录一下在linux下编写c语言程序的步骤。 步骤 1、打开终端窗口,执行以下命令安装gcc编译环境,树莓派系统默认已经安装好gcc环境,可跳过该步骤; sudo apt-get install gcc 2、执行以下命令安装头文件库...
  • linux下程序打包发布

    千次阅读 2018-10-30 19:05:53
    程序以test为例: 1. QtCreate使用Release版本编译 2. 从可运行程序的文件中拿出可执行文件,例:test 3. 终端使用ldd命令查看需要的连接库,例:ldd test 4. 把ldd查询到的所有需要的库导出 这里提供一个...
  • 在Linux下第一次编写C++程序

    千次阅读 2018-06-16 17:35:58
    日期2018-06-16综述此文章旨在指导新手在Linux下编写C++程序的一般步骤,包括设置vim程序语法、创建源文件、编译和执行。具体步骤1. 首先为了能够在Linux下编写C++语言,需要根据自己的喜好vim(程序编辑器)设置...
  • linux下用c语言的ftp程序

    热门讨论 2011-03-16 22:04:56
    linux下用c语言的ftp程序,欢迎下载,提出意见。
  • vscode windows开发linux程序

    千次阅读 2020-06-21 16:33:23
    1. 安装docker http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 点击 Docker QuickStart 图标来启动 Docker Toolbox 终端 2. 下载ubuntu镜像 ...4. vscode下载 Remote Developmentms
  • linux 制 作 烧 程 序 SD 卡 。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 981,160
精华内容 392,464
关键字:

怎样在linux下写程序

linux 订阅