資源簡介:文章目錄常用接口request_mem_region函數release_mem_region函數ioremap函數iounmap函數在驅動中的使用點擊下方閱讀原文可訪問文中超鏈接對于linux中的驅動來說,在操作硬件這個部分其實和在單片機中操作硬件幾乎是一樣的,不同的只是在linux中使用的是虛擬地址(如果開啟了MMU),而在單片機中都是直接操作物理地址;在lin...
資源簡介:文章目錄udev與mdev配置mdev熱插拔常用接口class_create函數class_destroy函數device_create函數device_destroy函數驅動中的修改點擊下方閱讀原文可訪問文中超鏈接在之前的內容中,執行應用程序之前,都要手動使用mknod命令來創建設備節點,這種方法非常的不方便,實際上現在的內核已經提供了一些接口,加上一個用戶空間程...
資源簡介:文章目錄設備號常用接口設備號申請/釋放register_chrdev_region函數alloc_chrdev_region函數unregister_chrdev_region函數其它宏定義字符設備的定義cdev_alloc函數字符設備的綁定cdev_init函數字符設備注冊/注銷cdev_add函數cdev_del函數file_operations結構實現一個簡單的字符設備驅動以前的接口register_chrdev函數unregi...
資源簡介:文章目錄需求搭建環境編寫http客戶端代碼注意點測試結果點擊下方閱讀原文可訪問文中超鏈接需求前面已經移植好了協議棧netx,也完成了UDP通信的測試,說明移植方面應該是沒有其它什么問題了。準備開展后續的工作,因為需求的原因,我需要將板子作為http客戶端來請求web服務器的數據,然后處理及顯示。搭建環境開始時我打算用...
資源簡介:文章目錄一個最簡單的驅動模塊驅動編譯的Makefile相關命令錯誤解決:點擊下方閱讀原文可訪問文中超鏈接一個最簡單的驅動模塊一個精簡的驅動模塊可以只有不到10行的內容,如下是一個簡單的測試程序。#include <linux/init.h>#include <linux/module.h>#define DEBUG(fmt, ...) \ do{ \ ...
資源簡介:文章目錄寫在前面準備移植開始移植驗證最后一點點擊下方閱讀原文可訪問文中超鏈接寫在前面ThreadX 是由 Express Logic 公司開發的實時操作系統。目前已被微軟收購,并且前不久開源了,當開源的時候很多論壇都第一時間發布了相關文章,可見其影響力還是很不錯的,剛好最近有一個新項目,需要用到網絡協議棧,而threadx有自己...
資源簡介:文章目錄內核的下載生成配置文件編譯解決錯誤啟動內核配置u-boot的環境變量編譯內核并啟動注意點網絡支持SD/MMC支持設備樹的其它修改點擊下方閱讀原文可訪問文中超鏈接內核的下載還是和u-boot移植的步驟差不多,首先是要選擇一個版本,然后下載鏡像,確保能夠正確編譯成功。對于版本的選擇,因為我是學習用,所以選擇較新的...
資源簡介:文章目錄重定位前的堆內存池那當我們使用malloc時,它是如何給我們分配內存的呢?以malloc為例再來看下重定位后結論點擊下方閱讀原文可訪問文中超鏈接重定位前的堆內存池首先看一下重定位前,在重定位前也就是第一階段,u-boot會保留一片內存用于堆,也就是gd->malloc_base這篇區域,其大小為0x400,具體見下面的內存圖:圖...
資源簡介:前面基于goni這塊板子移植的u-boot并不支持網絡,但是我的開發板上面是支持網絡的,所以這里把網絡支持添加上。先看一下硬件是怎樣接的:DM9000屬于類內存總線的設備,被映射到s5pv210的SROM區域,從圖上可以知道它接在SROM的bank1,CMD接在ADDR2。從前面的過程分析我們知道,網絡相關的初始化在board_init_r階段,有兩個相...
資源簡介:文章目錄前奏流程驅動匹配分析需要的屬性調試補充結果前奏隨著u-boot版本的變遷,u-boot的功能也越來越多越來越強大,在較新的u-boot中已經支持很多不同類型的文件系統,告別了以前需要移植者自己手動規劃eMMC/SD等鏡像存儲介質的分區信息(并非真正的磁盤分區,只是一個標號而已),可直接使用相關的命令就可以讀取出各種...
資源簡介:我所理解的u-boot移植可以分為以下幾個部分:1、內核級的配置與初始化這個主要就是在start.S文件里面那些匯編代碼,這部分呢我覺得基本上沒有改的必要,除非你很熟悉內核相關的東西。2、SOC級別的配置與初始化這部分的內容是比較多的,而且可以說貫穿整個u-boot,但基本上必要的都集中在lowlevel_init,其它的就取決于你是...
資源簡介:點擊下方閱讀原文可訪問文中超鏈接board_init_r和board_init_f差不多,都是執行一個循環,下面看下board_init_r干了些什么:/*common/board_r.c*/static init_fnc_t init_sequence_r[] = { initr_trace, initr_reloc, /* TODO: could x86/PPC have this also perhaps? */#ifdef CONFIG_ARM initr_caches, /* Note: For Free...
資源簡介:點擊下方閱讀原文可訪問文中超鏈接如果想了解重定位是怎么一回事,可以參考這位老哥的博客:https://blog.csdn.net/skyflying2012/article/details/37660265第一階段結束,便開始u-boot的重定位(這里有點小疑惑,在前面將u-boot從SD卡拷貝到DDR中時,我就是拷貝到鏈接地址的,也就是說那個時候u-boot的運行地址就和鏈接地...
資源簡介:點擊下方閱讀原文可訪問文中超鏈接接著上篇,執行了ldr pc, =_main后,就到arch/arm/lib/crt0.S文件了,本篇基本全是源碼分析,是一個很枯燥的過程,如果你只想看修改的部分可直接搜索“修改”兩個字,就能直接找到修改的地方,這個階段只修改了三個地方:ENTRY(_main)/* * Set up initial C runtime environment and call ...
資源簡介:點擊下方閱讀原文可訪問文中超鏈接現在開始就進入板級相關的初始化了,跳轉到board/samsung/goni/lowlevel_init.S文件,注意這里lowlevel_init搜索出來在arch/arm/cpu/armv7/lowlevel_init.S文件里面也有,而且這個文件還被編譯了,但仔細看一下就會發現,這個文件里面的lowlevel_init被聲明成了弱屬性,所以真正調用的是bo...
資源簡介:點擊下方閱讀原文可訪問文中超鏈接首先分析一下u-boot的鏈接腳本,這樣就能夠知道u-boot本身的大體組成及分布,如果想更詳細的了解,可以查看生成的u-boot.map文件,這個文件就能看出u-boot各個段的排布。在上一篇文章中,已經完成了u-boot的編譯,在u-boot根目錄下可以看到生成了一個u-boot.lds文件,這個文件就是u-boot的...
資源簡介:點擊文章下方閱讀原文可訪問文中超鏈接最近公司項目用到了xilinx的zynq7000 soc,開發方式有所不同,驅動的數據都是通過設備樹來提供,以前沒接觸過,所以想系統的學習一下相關的內容,但是手頭只有一塊三星的s5pv210開發板,使用的u-boot和linux系統不支持設備樹,只好自己移植,以此記錄一下移植過程,加深理解與記憶,如...
資源簡介:首先聲明本文譯自國外網站的一篇文章,原文鏈接如下:https://barrgroup.com/embedded-systems/how-to/c-volatile-keyword建議有條件的直接閱讀英文原版??赡茏x了這篇文章后,你會有所懷疑,因為你平時可能遇到過下面出現的情況,但是你并沒有添加volatile關鍵字,程序任然正常的運行,個人覺得可能有以下的原因:1.其實BU...
資源簡介:C++之父都說過,C++20是C++語言的一次重大變革,引入了大量的新特性。這其中個人認為最重要新特性是這三個:ModulesCoroutinesConceptsModules直接看代碼:// helloworld.ixxexport module helloworld; // module declarationimport <iostream>; // import declarationexport void hello() { // export decla...
資源簡介:這里我想主要介紹下在C語言中是如何實現的面向對象。知道了C語言實現面向對象的方式,我們再聯想下,C++中的class的運行原理是什么?首先我們來寫一段C++的class,拿一個Student類來舉例子:在頭文件中,我定義一個Student類:#pragma onceclass Student {public:??void SetNumber(int number);??void SetGrade(int gra...
資源簡介:在人工智能日益融合、異構及多架構的編程時代,如何進行跨架構的高性能與加速計算?屬于開發者頭腦風暴的時刻已經來臨,通過技術創新將帶來更高的開發能力。如果您是C++ 或 GPU 程序員、AI 開發人員、研究員或數據科學家,如果您對跨架構的高性能與加速計算感興趣,那么您一定會從這個活動中有所收獲。Intel將于10月19日北...
資源簡介:十一之前我去參加了C++全球開發者大會,今天才有時間和大家分享下。聽了C++之父的分享,C++之父聊了下他對C++23和C++26新標準的展望,如圖:可以看到C++23的更新主要是提供協程庫和模塊標準庫,都是在完善C++20引入的特性,其實沒什么新的東西。然而說會在C++23引入的network和executors,也終于不出意外的延期到了C++26。...
資源簡介:這里主要介紹下在C語言中是如何實現的面向對象。知道了C語言實現面向對象的方式,再聯想下,C++中的class的運行原理是什么?首先看一段C++的class,拿一個Student類來舉例子:在頭文件中,我定義一個Student類:#pragma onceclass Student {public:??void SetNumber(int number);??void SetGrade(int grade);??void P...
資源簡介:DMA,全稱Direct Memory Access,即直接存儲器訪問。DMA傳輸將數據從一個地址空間復制到另一個地址空間,提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸。我們知道CPU有轉移數據、計算、控制程序轉移等很多功能,系統運作的核心就是CPU,CPU無時不刻的在處理著大量的事務,但有些事情卻沒有那么重要,比方說...
資源簡介:常常有讀者問我:我不是科班出身,我工作經驗不夠豐富,新知識無法實踐,面試的時候怎么快速證明自己的能力......該怎么辦?以上問題我和很多同行都聊過,自己親身也經歷過,今天和大家分享下我的體會。非科班出身,怎么證明自己的實力?實話實說,在找工作方面,非科班出身不太占優勢,我之前也和很多非科班出身的朋友聊過...
資源簡介:在異步操作里,如異步連接、異步讀寫之類的協程,co_await這些協程時需要注意線程切換的細節。以asio異步連接協程為例:class?client?{public:????client()?{????????thd_?=?std::thread([this]{????????????io_ctx_.run();????????});????}????async_simple::coro::Lazy<boo...
資源簡介:經常看到說function的開銷比較大,慎用function之類的討論。那function究竟哪里開銷大,我找到了一篇為function做profile的文章,這篇文章中的英文比較簡單,我就不翻譯了,英文吃力的朋友也可以直接看下面的數據:Popular folklore demands that you avoid?std::function?if you care about performance.But is it reall...
資源簡介:最近看完了《C++性能白皮書》,這本書列出了一些性能優化的思路,不過只是一些指引,沒有講具體細節,我整理出了其中的關鍵點分享給大家:硬件篇作為一個程序員,想要性能優化,最好要了解些硬件,特別是CPU架構的一些知識點:流水線分支預測寄存器重命名數據預取指令重排和亂序執行同時多線程(超線程)數據并行?SIMD?單...
資源簡介:先看下這兩段代碼:代碼段1:const int row = 10240;const int col = 10240;int matrix[row][col];int TestRow() { //按行遍歷 int sum_row = 0; for (int r = 0; r < row; r++) { for (int c = 0; c < col; c++) { sum_row += matrix[r][c]; } } return sum_row;}代碼段2:int TestCol() { //按列遍歷 i...
資源簡介:本文授權自知乎用戶IceBear,點擊文末”閱讀原文“查看原文章。C++20 給我們帶來了非?,F代化的協程特性,但是主要的增加都集中于語核部分。由于庫特性尚未準備充分,所以 C++20 標準庫中尚沒有多少現成的、組裝好的協程設施供我們使用。但是!僅僅通過使用?std::coroutine_handle?(這是一個編譯器為之開洞的類)并在你...