原创 GDB內存調試初探三

調試準備 筆者在上一篇《GDB內存調試初探》中提到了一個簡單的調試應用(可執行文件名爲memory,並已上傳至CSDN的下載區),該應用會從標準輸入逐行讀取內存操作的相關“指令”,進行簡單的內存申請、釋放和讀寫的操作。本文仍將沿用此調試應

原创 GDB內存調試初探二

背景 本文記錄了筆者調試一個簡單的由C語言編寫的嵌入式應用,在main函數執行之後,第一次調用內存分配函數時,glibc的執行過程。對於普通的二進制應用,Linux內加載應用並執行,首先運行的是動態鏈接器;在應用的main函數被調用之前,

原创 Glibc線程局部存儲(TLS)的實現

背景 在筆者分析glibc源碼中的內存分配模塊時,遇到了線程局部變量thread_arena,該變量是線程專有的局部變量。在glibc源碼中,有相似的變量errno,也是線程專有的變量。儘管在glibc的其他頭文件中,errno被定義爲

原创 ARM/Linux平臺信號處理功能的實現探究

  前言 當嵌入式應用異常崩潰時,應用進程會接收到內核發送的信號,如SIGILL/SIGSEGV等。筆者對這一功能的實現感到非常好奇:如果應用註冊了信號處理函數,那麼這個信息處理函數可以在應用代碼執行到任意代碼處調用,這個調用者是誰呢?是

原创 GDB內存調試初探一

背景 嵌入式應用開發過程中,經常出現應用崩潰的缺陷,這些問題絕大多數與內存相關。根本的原因是,C/C++編程語言本身是內存、線程不安全的;當然還有次要的原因:開發隊伍能力不足,應用軟件結構不合理,偏重於多線程軟件開發而輕視多進程軟件方案的

原创 爲安卓或嵌入式Linux設備搭建調試開發環境

前言 在2017年筆者發佈了一篇文章,主要描述了在64位安卓手機上搭建基本的開發環境的操作(詳見:https://blog.csdn.net/yeholmes/article/details/78568172)。當時通過百度網盤提供了兩個

原创 [Linux內核]AArch64平臺任務切換的實現

    本文探究在AArch64平臺,Linux內核任務切換的實現機制。使用的調試工具主要爲gdb及qemu虛擬機,調試的內核版本爲5.3.12。筆者在實際工作中遇到一些互斥鎖的操作;當一個進程或內核線程嘗試對互斥鎖加鎖時,若該鎖已被鎖住

原创 簡單協程的實現

簡單協程的實現 基本原理 之前的一篇短文簡單分析了Linux內核中任務切換的實現機制,其精巧的方法讓人歎爲觀止:Linux內核源碼誠然是世界範圍內的IT精英的傑作,開源項目的典範。通過qemu虛擬機及gdb調試工具,對任務切換的功能可以有

原创 一種踩內存的定位方法(C++)

    在嵌入式應用開發過程中,踩內存的問題常常讓人束手無策。使用gdb調試工具,可以大幅加快問題的定位。不過,對於某些踩內存的問題,它的表現是間接的,應用崩潰的位置也是不固定的,這就給問題定位帶來了更大的困難。     筆者見過帶有虛函

原创 爲海思u-boot快速生成reg_info.bin文件

    在海思平臺的底層開發中,SoC的引腳、時鐘的配置是通過一個Excel表格生成的reg_info.bin來實現的,這個reg_info.bin文件是在編譯u-boot過程中需要的,可以通過查看最終的u-boot鏡像文件的生成過程得知

原创 使用QEMU虛擬機調試Linux內核

    作爲一名初級的嵌入式底層開發人員,若想要深入學習Linux內核,需要謹慎地選擇開發環境和開發工具。與應用層開發不同的是,Linux內核的學習和開發調試通常是比較困難的,原因之一在於可用的Linux內核調試工具比較少。很久以前筆者注

原创 困難的嵌入式軟件開發

    作爲一名初級的嵌入式軟件開發從業者,幾年的工作經歷讓我感覺到嵌入式軟件的開發越來越困難了。當然,也可能是近來工作中接觸到應用層方面的開發,與底層的啓動器/內核/文件系統移植方面的工作不同,引發的一些感觸。然而對於底層的開發,我仍然

原创 使用NumPy實現GoogLeNet的前向檢測功能

2014年GoogLeNet的出現,再次刷新了圖像分類檢測的準確率。在《Going Deeper with Convolutions》論文中,提出了Inception神經網絡架構,隨後又出現了Inception-v2、Inception-

原创 使用Numpy訓練基於MNIST數據集的深度卷積神經網絡

在《Fundamentals of Deep Learning》一書中,作者將深度神經網絡中的隱藏層的作用描述爲"This is where most of the magic is happening when the neural n

原创 NRF51-SDK的低功耗藍牙廣播包的單通道掃描實現

一,前言       半導體生產商NORDIC SEMICONDUCTOR爲低功耗藍牙芯片NRF51提供了開發工具包NRF51-SDK,該SDK中包含了與型號爲NRF51的藍牙芯片提供了大量的例程代碼,同時也包含了幾種不同的藍牙協議棧(S