国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ubuntu20.04 上啟用 VCAN 用作本地調(diào)試

這篇具有很好參考價(jià)值的文章主要介紹了Ubuntu20.04 上啟用 VCAN 用作本地調(diào)試。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、啟用本機(jī)的 VCAN? 編輯

1.1? 加載本機(jī)的 vcan

1.2? 添加本機(jī)的 vcan0

1.3? 查看添加的 vcan0

1.4? 開啟本機(jī)的 vcan0

1.5? 關(guān)閉本機(jī)的 vcan0

1.6? 刪除本機(jī)的 vcan0

二、測試本機(jī)的 VCAN

2.1? CAN 發(fā)送數(shù)據(jù) 代碼

2.2? CAN 接收數(shù)據(jù) 代碼

2.3? CMakeLists.txt 代碼

2.4? 虛擬 CAN 收發(fā)測試

三、VCAN 的其它操作

3.1? 啟用 VCAN

3.2? 關(guān)閉 VCAN

3.3? 重啟 VCAN

3.4? 停止 VCAN

3.5? 設(shè)備波特率

3.6? 顯示 VCAN 詳情

3.7? VCAN 回環(huán)測試

3.8? 發(fā)送 VCAN 數(shù)據(jù)

3.9? 接收 VCAN 數(shù)據(jù)

3.10? 查看 VCAN 狀態(tài)

3.11? VCAN 數(shù)據(jù)過濾


當(dāng)沒有CAN設(shè)備時(shí),可使用 Ubuntu 的虛擬 CAN 進(jìn)行通訊測試。文章來源地址http://www.zghlxwxcb.cn/news/detail-774268.html

一、啟用本機(jī)的 VCAN

? 1.1 加載本機(jī)的 vcan

# 加載虛擬 CAN:
  sudo modprobe vcan

? 1.2 添加本機(jī)的 vcan0

# 添加 VCAN0 到操作系統(tǒng):
  sudo ip link add dev can0 type vcan

? 1.3 查看添加的 vcan0

# 查看 CAN0 :
  ifcon?g -a

? 1.4 開啟本機(jī)的 vcan0

# 開啟 CAN0 :
  sudo ip lin

? 1.5 關(guān)閉本機(jī)的 vcan0

# 關(guān)閉 CAN0 :
  sudo ip link set dev can0 down

? 1.6 刪除本機(jī)的 vcan0

# 刪除 CAN0 :
  sudo ip link del dev can0

二、測試本機(jī)的 VCAN

? 2.1 CAN 發(fā)送數(shù)據(jù) 代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <linux/can.h>
#include <linux/can/raw.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>

int main(int argc, char* argv[]) {
    int skt = socket(PF_CAN, SOCK_RAW, CAN_RAW);
    if (0 > skt) {
        perror("create socket error");
        return -1;
    }

    // 指定 can0 設(shè)備
    struct ifreq ifr = { 0 };
    strcpy(ifr.ifr_name, "vcan0");
    ioctl(skt, SIOCGIFINDEX, &ifr);

    struct sockaddr_can addr = { 0 };
    addr.can_family = AF_CAN;
    addr.can_ifindex = ifr.ifr_ifindex;

    // 將 can0 與套接字進(jìn)行綁定
    int rv = bind(skt, (struct sockaddr*)&addr, sizeof(addr));
    if (rv < 0) {
        perror("bind socket error");
        close(skt);
        return -2;
    }

    // 設(shè)置過濾規(guī)則:不接受任何報(bào)文、僅發(fā)送數(shù)據(jù)
    setsockopt(skt, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);

    // 發(fā)送數(shù)據(jù)
    struct can_frame frame = { 0 };
    frame.can_id = 0x123;
    frame.can_dlc = 6; {
        frame.data[0] = 0xA0;
        frame.data[1] = 0xB0;
        frame.data[2] = 0xC0;
        frame.data[3] = 0xD0;
        frame.data[4] = 0xE0;
        frame.data[5] = 0xF0;
    }

    unsigned short index = 0;
    while (true) {
        // 開始發(fā)送數(shù)據(jù)
        rv = write(skt, &frame, sizeof(frame));
        if (sizeof(frame) != rv) {
            perror("write can frame failed");
            break;
        } else {
            printf("send count : %d \n", ++index);
            sleep(1); // 1 second            
        }
    }

    close(skt);
    return 0;
}

? 2.2 CAN 接收數(shù)據(jù) 代碼

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <linux/can.h>
#include <linux/can/raw.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>

int main(int argc, char* argv[]) {
    int skt = socket(PF_CAN, SOCK_RAW, CAN_RAW);
    if (0 > skt) {
        perror("create socket error");
        return -1;
    }

    // 指定 can0 設(shè)備
    struct ifreq ifr = { 0 };
    strcpy(ifr.ifr_name, "vcan0");
    ioctl(skt, SIOCGIFINDEX, &ifr);

    struct sockaddr_can addr = { 0 };
    addr.can_family = AF_CAN;
    addr.can_ifindex = ifr.ifr_ifindex;

    // 將 can0 與套接字進(jìn)行綁定
    int rv = bind(skt, (struct sockaddr*)&addr, sizeof(addr));
    if (0 > rv) {
        perror("bind error");
        close(skt);
        return -2;
    }

    // 設(shè)置過濾規(guī)則
    // setsockopt(skt, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);

    // 接收數(shù)據(jù)
    struct can_frame frame = { 0 };
    while (true) {
        rv = read(skt, &frame, sizeof(struct can_frame));
        if (rv < 0) {
            perror("read can frame error");
            break;
        }

        // 校驗(yàn)是否接收到錯(cuò)誤幀
        if (frame.can_id & CAN_ERR_FLAG) {
            printf("error can frame \n");
            break;
        }

        // 校驗(yàn)幀格式
        if (frame.can_id & CAN_EFF_FLAG) {
            printf("擴(kuò)展幀 <0x%08x> ", frame.can_id & CAN_EFF_MASK);
        } else {
            printf("標(biāo)準(zhǔn)幀 <0x%03x> ", frame.can_id & CAN_SFF_MASK);
        }

        // 校驗(yàn)幀類型:數(shù)據(jù)幀還是遠(yuǎn)程幀
        if (frame.can_id & CAN_RTR_FLAG) {
            printf("remote request frame \n");
            continue;
        }

        // 打印數(shù)據(jù)
        printf("[%d] ", frame.can_dlc);
        for (int idx = 0; idx < frame.can_dlc; idx++) {
            printf("%02x ", frame.data[idx]);
        }   printf("\n");
    }

    close(skt);
    return 0;
}

? 2.3 CMakeLists.txt 代碼

cmake_minimum_required(VERSION 3.0)

# 設(shè)置統(tǒng)一輸出目錄
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)

# 設(shè)置統(tǒng)一鏈接目錄
link_directories(${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})

# 主要工程項(xiàng)目
add_executable(vcan_recv vcan_recv.cpp)
add_executable(vcan_send vcan_send.cpp)

?? 2.4 虛擬 CAN 收發(fā)測試

?? 三、VCAN 的其它操作

# 安裝 can 工具包:
  sudo apt install can-utils

? 3.1 啟用 VCAN

# 啟用 CAN
  sudo ip link set vcan0 up

? 3.2 關(guān)閉 VCAN

# 關(guān)閉 CAN
  sudo ip link set vcan0 down

? 3.3 重啟 VCAN

# 重啟CAN
  sudo canconfig vcan0 restart

? 3.4 停止 VCAN

# 停止CAN
  sudo canconfig vcan0 stop

? 3.5 設(shè)備波特率

# 設(shè)置波特率
  sudo ip link set vcan0 up type can bitrate 250000

? 3.6 顯示 VCAN 詳細(xì)信息

# 顯示 CAN 詳細(xì)信息
  sudo ip -details link show vcan0

?3.7 VCAN 回環(huán)測試

# 回環(huán)測試
  sudo canconfig vcan0 ctrlmode loopback on

?3.8 發(fā)送 VCAN 數(shù)據(jù)

# 向 CAN 總線發(fā)送數(shù)據(jù)
  sudo cansend vcan0 --identifier=ID+數(shù)據(jù)

? 3.9 接收 VCAN 數(shù)據(jù)

# 接收 CAN 總線數(shù)據(jù)
  sudo candump vcan0

? 3.10 查看 VCAN 狀態(tài)

# 查看CAN總線狀態(tài)
  sudo canecho vcan0

? 3.11 VCAN 數(shù)據(jù)過濾

# 使用濾波器接收 ID 匹配的數(shù)據(jù)
  sudo candump vcan0 --filter=ID:mask

到了這里,關(guān)于Ubuntu20.04 上啟用 VCAN 用作本地調(diào)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ubuntu20.04一鍵安裝VScode搭建ROS編程環(huán)境

    ubuntu20.04一鍵安裝VScode搭建ROS編程環(huán)境

    VSCode 全稱 Visual Studio Code,是微軟出的一款輕量級代碼編輯器,免費(fèi)、開源而且功能強(qiáng)大。它支持幾乎所有主流的程序語言的語法高亮、智能代碼補(bǔ)全、自定義熱鍵、括號匹配、代碼片段、代碼對比 Diff、GIT 等特性,支持插件擴(kuò)展,并針對網(wǎng)頁開發(fā)和云端應(yīng)用開發(fā)做了優(yōu)化。

    2023年04月24日
    瀏覽(36)
  • 沒有U盤電腦如何使用本地硬盤安裝Ubuntu20.04(雙系統(tǒng))

    沒有U盤電腦如何使用本地硬盤安裝Ubuntu20.04(雙系統(tǒng))

    DELL7080臺式機(jī) 聯(lián)想 E14筆記本 Win10專業(yè)版 Ubuntu20.04 兩塊硬盤一塊固態(tài)一塊機(jī)械 一塊固態(tài)硬盤128G 沒有U盤Win10電腦下如何使用本地硬盤安裝Ubuntu20.04(單雙硬盤都行) 雙硬盤安裝 一、下載鏡像文件 1.自行下載安裝鏡像文件 二、分區(qū) 1.Win10下磁盤管理壓縮2個(gè)分區(qū)一個(gè)10G左右制作安

    2024年02月09日
    瀏覽(19)
  • Ubuntu20.04本地部署Stable-Diffusion-webui AI繪畫環(huán)境

    Ubuntu20.04本地部署Stable-Diffusion-webui AI繪畫環(huán)境

    最近AI繪畫很火,所以想在本地部署個(gè)環(huán)境體驗(yàn)一下。原本打算在Windows下安裝,網(wǎng)上有很多教程,也有很多大佬做了整合包,可是我的Windows系統(tǒng)下的顯卡驅(qū)動版本太低,也沒法升級,只能裝CUDA9,導(dǎo)致安裝torch會出現(xiàn)問題。所以考慮在Ubuntu下安裝,參考了幾篇文章,所幸也安

    2023年04月11日
    瀏覽(42)
  • 【在英偉達(dá)nvidia的jetson-orin-nx和PC電腦ubuntu20.04上-裝配ESP32開發(fā)調(diào)試環(huán)境-基礎(chǔ)測試】

    【在英偉達(dá)nvidia的jetson-orin-nx和PC電腦ubuntu20.04上-裝配ESP32開發(fā)調(diào)試環(huán)境-基礎(chǔ)測試】

    最近在使用一直在調(diào)試ESP32,作為新手,也有很多不懂的地方,一點(diǎn)點(diǎn)慢慢學(xué),開始是裝的win環(huán)境,后來又嘗試了jetson-orin-nx和ubuntu上,在Linux 下開發(fā)都習(xí)慣使用命令行,但是在Windows下習(xí)慣使用軟件點(diǎn),而調(diào)試esp32的話,還是建議使用命令行形式。 當(dāng)然說得有點(diǎn)遠(yuǎn)了,本次主要

    2024年02月08日
    瀏覽(22)
  • Ubuntu18.04 升級Ubuntu20.04

    Ubuntu18.04 升級Ubuntu20.04

    因項(xiàng)目環(huán)境需要,欲將Ubuntu18.04升級至Ubuntu20.04,參考網(wǎng)上其他小伙伴的方法,也遇到了一個(gè)問題,特此記錄一下,希望能幫助其他有同樣問題的小伙伴。 參考:第十五章 Ubuntu18.04LTS升級到20.04LTS 主要的步驟: 在執(zhí)行“do-release-upgrade”時(shí),遇到“Failed to connect to https://changel

    2024年02月02日
    瀏覽(28)
  • Ubuntu20.04升級到Ubuntu 22.04

    Ubuntu20.04升級到Ubuntu 22.04

    執(zhí)行如下命令將Ubuntu升級到最新的版本: 升級完成后,重啟系統(tǒng) 重啟成功之后,查看系統(tǒng)的當(dāng)前版本 最新版本應(yīng)該是20.04.6,如下圖所示。 執(zhí)行如下命令開始升級 一路yes或確認(rèn)即可,下面是一些過程中的操作。 所有當(dāng)前 Ubuntu 20.04 的源列表文件將被 Ubuntu 22.04 的 jammy 源列表

    2024年02月17日
    瀏覽(26)
  • Ubuntu20.04配置

    Ubuntu20.04配置

    新創(chuàng)建的用戶沒有root權(quán)限,我們執(zhí)行以下命令給用戶sudo權(quán)限 刪除用戶及用戶所有文件(/home/username/路徑下的所有文件) 刪除用戶但保留所有用戶文件: 查詢系統(tǒng)整體磁盤使用情況: df -h 查詢指定目錄的磁盤占用情況:默認(rèn)是當(dāng)前目錄 du -h

    2024年02月04日
    瀏覽(19)
  • Ubuntu 20.04桌面美化

    Ubuntu 20.04桌面美化

    文章目錄 前言 1 安裝美化軟件 1.1 更新軟件源 1.2 安裝tweak工具 1.3 安裝gnome擴(kuò)展模塊 1.4 tweak預(yù)配置 2 主題美化 2.1 主題下載 2.2 主題設(shè)置 3 圖標(biāo)美化 3.1 圖標(biāo)下載 3.2 圖標(biāo)設(shè)置 4 任務(wù)欄美化 4.1 安裝擴(kuò)展 4.2 安裝插件 總結(jié) 最近將開發(fā)環(huán)境更新到了 Ubuntu 20.04 ,相對于 Ubuntu 18.04 確

    2024年02月08日
    瀏覽(19)
  • Ubuntu 20.04 桌面美化

    Ubuntu 20.04 桌面美化

    Ubuntu 20.04 在 2020 年 4 月 28 日發(fā)布,距今已經(jīng)快四個(gè)月了,我將自己的筆記本升級成 Ubuntu 20.04 操作系統(tǒng)了,Ubuntu 20.04 默認(rèn)安裝完成的桌面比較簡單,如下圖: 根據(jù)我個(gè)人的喜好,我會進(jìn)行一系列的美化和優(yōu)化,美化過的桌面看著非常漂亮,用著也得心應(yīng)手。俗話說磨刀不誤

    2024年02月04日
    瀏覽(27)
  • Ubuntu 20.04 安裝宋體

    環(huán)境: ? ? ? ? ubuntu 20.04,英文環(huán)境,但已經(jīng)安裝中文包 檢查ubuntu中安裝的中文字體 命令: fc-list :lang=zh 檢查ubuntu中安裝的所有字體 命令: fc-list 宋體下載: Simsun Font - Free Fonts 網(wǎng)盤分享:鏈接: https://pan.baidu.com/s/12fSpgkUWuWsh-OU32q1WCA 提取碼: wpia 或者從win10上拷貝,但是拷貝的

    2024年02月10日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包