Category: kernel

  • Develop process in Linux ath10k driver with LEDE

    Develop process in Linux ath10k driver with LEDE

    ath repo: https://bitbucket.org/mlouielu/ath LEDE repo: https://github.com/lede-project/source, commit: 99be4170cb27e ath repo: git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git, commit: e72acb704e94   Modify ATH10k Most of the time ath repo’s ath10k source code will surpass LEDE’s ath10k source code, you will need to know this and change the code when building got conflict. The step I use is: Change code for ath10k driver git…

  • 移植 Apache MyNewt 到 STM32F429 開發板

    移植 Apache MyNewt 到 STM32F429 開發板

    MyNewt 是由 Apache incubator 推展的新依代 IoT kernel,其主要負責維護的人員來自 runtime.io。 最大的特點是有支援現成 BLE stack,同時以 bootloader 來驗證 kernel image 的正確與安全。以下是官方所描述的 Features: Real-time operating system kernel (Mynewt OS) Bluetooth Low Energy stack (BLE 4.2) – choose HOST only or CONTROLLER only or FULL stack. Command line package management and build system (Newt Tool) Hardware Abstraction Layer unifying common MCU features,…

  • 於 Linux / GRUB2 環境下升級 Crucial SSD firmware

    於 Linux / GRUB2 環境下升級 Crucial SSD firmware

    GitHub: crucial-ssd-firmware-grub 0. 前言 本身有台 Thinkpad X220,內裝有 Micron Crucial SSD 兩顆,分別是 Crucial M4 mSata SSD 128G (CT128M4SSD3) 以及 Crucial MX200 256G (CT250MX200SSD1)。前者在 2012  年購買,後者在 2015 年購買。 這次想要升級的原因,是因為在 windows 下發現作為系統碟的 M4 mSata 出現多磁區錯誤以及重新分配的狀況,查看其韌體後發現是最老的版本 (01MH),目前網路上可以查到的版本為 07MH。為了 SSD 的健康,決定升級韌體。 在美光的網站下載相對應的韌體後,解壓縮開啟程式準備安裝。參照最新的 Guideline 後,可以得知目前 (2015後) 都會採用 bootable 的方式進行,因此不用再額外準備 USB 來製作開機碟。這是好事,但是一想到電腦上有 GRUB,就覺得有點問題。 果不其然,在安裝好韌體更新程式後,電腦自動重新開機,回到 GRUB2 的選單,選擇 windows 後轉入 repair mode。但是在這個環節出現無法開機 (not bootable)…

  • 中文翻譯 – 9 lessons from 25 years of Linux kernel development

    中文翻譯 – 9 lessons from 25 years of Linux kernel development

    原文網址:https://opensource.com/article/16/12/yearbook-9-lessons-25-years-linux-kernel-development Posted 14 Dec 2016 | Greg Kroah-Hartman 註:作者 Greg Kroah-Hartman,曾經來台在 COSCUP 2013 演講,是許多 linux tree 的 maintainer (usb driver core, debugfs, sysfs…etc),同時也是 staging 的 maintainer (staging 裏面有個地方是給新手練習 submit patch 的,greg kh 也會在 newbie mailing list 上解惑)。 他也是 Linux Device Drivers 跟 Linux Kernel in a Nutshell 的作者,台灣有翻譯前者,不過兩本書都很老了 (2.6的年代吧),他自己也有說LDD 4rd 近期大概不會出版QQ。 可以說 Greg KH 在 Linux…

  • Getting Started with Real-time Operating Systems

    Getting Started with Real-time Operating Systems

    影片網址:https://atollic.wistia.com/medias/gwgee6ev93 影片簡單的介紹了 Bare-metal 下的 Scheduling technique, preemption 以及 FreeRTOS 的特性還有有關 Task 基礎事項 (如何建立,Task Control Block, Task State),如果沒有看過 RTOS 相關的東西的話這個影片可以「快轉的」看一下。  

  • 10分鐘讀懂 linker scripts

    10分鐘讀懂 linker scripts

    背景知識: linker:  將多個 input files 輸出為一個 output file. output file 與 input files 的格式是一種特殊資料格式稱做 object file format (目的檔格式),每個檔案則稱做 object file (目的檔),輸出檔則常稱做 executable (可執行檔),當然也能稱為 object file。 每個 object file 都有一個 section list。 input section: 在 input file 的 section。 output section: 在 output file 的 section。 Sections: 每個 section 在 object file 中都有至少有 名子 (name) 跟 大小 (size) 幾乎每個 section…

  • Mutex, Semaphore, the difference, and Linux kernel

    Mutex, Semaphore, the difference, and Linux kernel

    名詞定義 Mutex: Linux kenrel 中的 mutex lock, <include/mutex.h> Semaphore: Linux kernel 中的 semaphore, <include/semaphore.h> mutual exclusion: 中翻互斥鎖,一個概念,為了防止 concurrency 狀況下出現 race condition.   Mutex 與 Semaphore 最大的差異是: 理論上,你應該要先跟面試官或是問你這個問題的人互動,詢問一下其所謂的差異是指哪個部份 (實作、用途、還是結構?),以及詢問這個問題時,想要將兩者應用在那邊,對於後續的回答會有所幫助。 30秒:最大的差異在於 Mutex 只能由上鎖的 thread 解鎖,而 Semaphore 沒有這個限制,可以由原本的 thread 或是另外一個 thread 解開。另外,Mutex 只能讓一個 thread 進入 critical section,Semaphore 的話則可以設定要讓幾個 thread 進入。這讓實際上使用 Mutex 跟 Semaphore 場景有很大的差別。 _ 60秒 (cont.):舉例而言,Mutex 的兩個特性:一個是只能有持鎖人解鎖、一個是在釋放鎖之前不能退出的特性,讓…

  • 無法 build Linux kernel samples/bpf

    小結 總之,遇到問題記得先看 README.md / README.rst / README。   解決方式 在 linux/samples/bpf 這個資料夾裏面無法 build 出 sample 來 ➜ bpf git:(master) ✗ make make -C ../../ $PWD/ make[1]: Entering directory ‘linux’ CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CHK include/generated/timeconst.h CHK include/generated/bounds.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh DESCEND objtool LD linux/samples/bpf/built-in.o HOSTCC linux/samples/bpf/test_verifier.o HOSTCC linux/samples/bpf/libbpf.o HOSTLD linux/samples/bpf/test_verifier HOSTCC linux/samples/bpf/test_maps.o…

  • Pipeline Speak, Part 2: The Second Part of the Sandy Bridge Pipeline 中文翻譯

    Pipeline Speak, Part 2: The Second Part of the Sandy Bridge Pipeline 中文翻譯

    原文:https://software.intel.com/en-us/blogs/2011/12/01/pipeline-speak-part-2-the-second-part-of-the-sandy-bridge-pipeline 管線後端 The Back-End 管線的後端負責執行從前端產生的微指令。為了要讓後端的資源能夠有效的被利用,後端使用自己的 bookkeeping system 來追蹤每一個微指令,其所需資料 [data requires] 以及執行狀態 [exectes status]。然後它將以任何順序來執行微指令 ─ 根據微指令的所需資料什麼時候全部準備完成以及是否有可用的執行資源。微指令的 bookkeeping 以及排程可以說非常的複雜,而且需要許多專用的隊列結構。當有些隊列結構已經滿了,也就是後端不能在從前端接收新的微指令 ─ 在 Sandy Bridge 最佳化方法中,我們稱這種情況做 ” back-end bound pipeline slots”。 後端持續在追蹤的執行資源 [ execution resources] 稱做執行單元 [execution units]。每個 microarchitecture 可能會有稍微不同的 Layout 以及不同的可用執行單元。這些執行單元是在處理上處理特定功能的邏輯組件,像是加法、除法、邏輯位移、從記憶體讀取等。當微指令使用完執行單元以及所有資料都已經讀取或儲存完畢,我們稱他們已經 “退休” [retired] ─ 這表示微指令已經完成在管線該做的工作。這些微指令絕對不會再被顯式的被轉換回指令 [instructions]。而一個指令被 “退休” 則代表所有的其產生的微指令都已經 “退休”,不過這只是個抽象化的表達方式來說明管線後端是如何處理微指令而已。   了解一點處理器的微架構,包括管線的基礎知識,在效能分析上可以說非常的有幫助。特別是在 Intel Sandy Birdge 架構,因為,第一次在 x86 處理器上,performance events 可以從一個內聚的方法…

  • Pipeline Speak: Learning More About Intel  Microarchitechture Codename Sandy Bridge 中文翻譯

    Pipeline Speak: Learning More About Intel Microarchitechture Codename Sandy Bridge 中文翻譯

    中文翻譯前言 為了理解 perf 的輸出意義[1],必須要了解 CPU Microarchitecture。如果你用 perf stat -d gzip file1 這個方式來輸出,你會發現到輸出中有加粗這個部份: ➜ /tmp perf stat -d gzip files Performance counter stats for ‘gzip files’: 6990.942695 task-clock:u (msec) # 0.996 CPUs utilized 0 context-switches:u # 0.000 K/sec 0 cpu-migrations:u # 0.000 K/sec 112 page-faults:u # 0.016 K/sec 22,653,310,816 cycles:u # 3.240 GHz (33.32%) 9,561,514,420 stalled-cycles-frontend:u #…