日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

《Verilog数字系统设计教程(第2版).pdf》

發布時間:2023/12/15 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 《Verilog数字系统设计教程(第2版).pdf》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Verilog數字系統設計教程(第2版).pdf

https://github.com/shigh1005/pdf_book


《Linux設備驅動開發詳解:基于最新的Linux 4.0內核.pdf》

《Linux設備驅動開發詳解(基于最新4.0內核)》前言

LinuxDev
2015-04-28
閱讀數:1056

Linux從未停歇腳步。Linus Torvalds,世界上最偉大的程序員之一,Linux內核的創始人,Git的締造者,仍然在沒日沒夜的合并補丁,升級內核。做技術,從來沒有終南捷徑,拼的就是坐冷板凳的傻勁。

這是一個連閱讀都被碎片化的時代,在這樣一個時代,人們趨向于激進、浮躁。內心的不安寧使我們極難靜下心來研究什么。我見過許許多多的Linux工程師,他們的簡歷書寫著“精通”Linux內核,有多年的工作經驗,而他們的“精通”卻只是把某個寄存器從0改成1,從1改成0的不斷重復;我見過許許多多的Linux工程師,他們終日埋頭苦干,敲打著自己的機器和電路板,卻從未冷靜下來思考,并不斷重構和升華自己的知識體系。

這是要把牢底坐穿的程序員。這樣“忙忙碌碌”的程序員,從來都不是什么好程序員。

優秀的程序員,最優秀的品質是能夠內心寧靜地學習與思考問題,透析代碼背后的架構、原理和設計思想。沒有思想的代碼是垃圾代碼,沒有思想的程序員,只是在完成低水平重復建設的體力活。很多程序員,連自己寫的代碼最后在機器里面怎么跑都從不過問,很多事情莫名其妙地發生了,很多bug莫名其妙地消失了……永遠都是得過且過

由此,衍生出《Linux設備驅動開發詳解》新版的第一個出發點,那就是帶給讀者更多關于Linux開發背后思想的講解,奠定根基。《Linux設備驅動開發詳解(基于4.0內核)》呈現給讀者的,更多的是一種思考,而不是知識點的簡單羅列

這次更新更進一步加強了對驅動編程所涉及Linux內核最底層機理的講解,并對前2版的基礎理論部分進行了大篇幅地重寫,實例代碼也被大面積重構。大幅度修改的內容包括中斷、定時器、進程生命周期、uevent、并發、編譯亂序、執行亂序、等待隊列、I/O模型、內存管理等。這些知識點是如此重要,是真正證明程序員對Linux理解的部分,只有打好根基,才能游刃有余。

新版刪除了《Linux設備驅動開發詳解》第一版、第二版大量描述各種具體具體驅動類型的章節比如Sound、PCI、MTD、TTY等,而將更多焦點轉移到了驅動編程背后的內核原理,并試圖從Linux內核上百個驅動子系統中尋找出內部的規律,以培養讀者舉一反三的能力

Linux內核有上百個驅動子系統,這一點從內核的drivers子目錄就可以看出來:

好吧,傻子才會一個目錄一個目錄地去看,一個目錄一個目錄地從頭學起。我們勢必要尋找各種驅動子系統的共性,摸索規律。本次更新,我們將更多看到各驅動子系統的類比,以及驅動子系統的層次化設計。

技術工作,從來都不是一勞永逸。這世界變化太快,當前技術革新的速度數倍于我們父輩祖輩祖祖輩經過的任何時代。證明你是真球迷還是偽球迷的時候到了。這是偽程序員的地獄,也是真程序員痛苦中的狂歡。

從浩如煙海的知識體系中、不斷更新的軟件版本中終生學習,不斷攻克一個個挑戰,獲取新的養分,尋找新的靈感,這實在是黑暗碼農生涯中不斷閃現的璀璨光芒。

自本書第一版、第二版發布后,內核版本不斷刷新,3.0、3.1、3.2…3.19、4.0、4.1,變化的是軟件的架構,不變的是Linus的熱情。

這無疑是本次升級的第二個出發點,更新Linux驅動編程的知識體系以符合最新的時代。所以,本次更新大量新增了關于Device Tree、ARM Linux移植、Linux電源管理、GPIO、clock、timer、pinmux、DMA等的內容。我們的操作平臺,也轉移到了QEMU模擬的4核Cortex-A9電路板,書中的實例,基本都轉移到了市面流行的新芯片。

最近兩三年,老是聽到許多程序員抱怨,缺乏講新內核的資料、缺乏從頭到尾講Device Tree的資料,但是我想說,這實在不是什么難點。難點仍然是本書第一個出發點要解決的問題,如果有好的基礎,以優秀程序員極強的學習能力,應該很快就可以掌握這些新知識。機制沒有變,變化的是只是策略。

所以學習能力,也是優秀程序員的又一品質。沒有人生下來就是天才,良好學習能力的培訓,本身也是通過不斷學習來獲取的。可以說,學的越多的人,學新東西一定越快,學習能力也變得越強。因為,知識的共通性實在太多。

讀者閱讀本書的思路,不應該是企圖把它當成一本工具書、查API的書,而是一本梳理完整理論體系、開發思想、軟件架構的書。唯如此,我們才能適應未來新的變化。

不知不覺中,離本書的第一次出版已經過去了七個年頭。而自本次更新開始實施至今,也經過了一輪寒暑更替。歲月如歌,七載而下,我已非當年的意氣青年。本書一版,二版,再版,這實非當初的預料。回首過去,我們驚奇地發現,這七年,正好是Linux由弱而盛,節節勝利的七年。也是許多如我一般的碼農成家立業、結婚生子的七年。未來七年的Linux會是什么樣子,我們無從預料。本書是否會有更進一步的新版,我們也無法預知,一如Linux沒有路線圖。社區和生態就是最好的Roadmap,萬事隨緣,而唯一不變的只是激情。

時代的滾滾車輪,推動著Linux內核的版本不斷向前,也推動著每個人的人生。紅塵滾滾,

我不去想是否能夠成功,

既然選擇了遠方,

便只顧風雨兼程。

最后,本書能得以出版,要感謝帶領我向前的人生導師和我的眾多小伙伴,他們或者在我人生的關鍵時刻改變了我,或者帶給了我黑暗程序生涯中無盡的快樂和動力。我的小伙伴,他們力挺我,鼓勵我,也辱罵我,奚落我,這些,就是真摯的友情。

謹以此書,致以對楊平先生、何昭然、方毅偉、李華毅、宋志吾、杜向龍、葉祥振、劉昊、王榕、何曄、王立賽、曾過、劉永生、段炳華、章君義、王文琪、盧鵬、劉濤、徐西寧、吳赫、任橋偉、秦龍廷、胡良兵、張家旺、王雷、Bryan Wu、Eric Miao、Qipan Li、Guoying Zhang、陳健松、應榮軍、Haoyu Zhong、劉洪濤、季久峰、邴杰、孫志忠、吳國舉、Bob Liu、趙小吾、賀亞鋒、劉仕杰、Hao Yin等老師和小伙伴的深深感激;謹以此書,致以對我的父母大人、老婆大人、兄長和姐姐、偉大丈母娘的深深感激,本書新版的寫作時間超過一年,其過程是一種巨大的肉體和精神折磨,沒有他們的默默支持和不斷鞭策,是不可能完成的;謹以此書,致以對為本書做出巨大貢獻的編輯、策劃老師們,尤其是張國強老師深深的感激!

由于篇幅的關系,我沒有辦法一一列舉所有我要感激的人入感謝名單。但是,我這些年從你們那里獲得的,遠遠大于我付出的。所以,內心深處,唯有懷著對小伙伴深深的感恩,不斷前行。歲月如歌,吾歌狂行。

宋寶華

2015年4月于上海浦東


1.4 Linux 設備驅動

1.4.1 設備的分類及特點

計算機系統的硬件主要由 CPU、存儲器和外設組成。隨著 IC 制作工藝的發展,目前, 芯片的集成度越來越高,往往在 CPU 內部就集成了存儲器和外設適配器。譬如,相當多的 ARM、PowerPC、MIPS 等處理器都集成了 UART、I2C 控制器、SPI 控制器、USB 控制器、 SDRAM 控制器等,有的處理器還集成了 GPU(圖形處理器)、視頻編解碼器等。

驅動針對的對象是存儲器和外設(包括 CPU 內部集成的存儲器和外設),而不是針對 CPU 內核。Linux 將存儲器和外設分為 3 個基礎大類。

● 字符設備。

● 塊設備。
● 網絡設備。

字符設備指那些必須以串行順序依次進行訪問的設備,如觸摸屏、磁帶驅動器、鼠標 等。塊設備可以按任意順序進行訪問,以塊為單位進行操作,如硬盤、eMMC 等。字符設備 和塊設備的驅動設計有出很大的差異,但是對于用戶而言,它們都要使用文件系統的操作接 口 open()、close()、read()、write() 等進行訪問。

在 Linux 系統中,網絡設備面向數據包的接收和發送而設計,它并不傾向于對應于文件 系統的節點。內核與網絡設備的通信與內核和字符設備、網絡設備的通信方式完全不同,前 者主要還是使用套接字接口。

SRAM、Flash、SDRAM、

磁盤的讀寫方式,UART、I2C、USB 等設備的接口以及輪詢、中斷、DMA 的原理,

PCI 總線的工作方式以及 CPU 的內存管理單元(MMU)

虛擬機環境:

http://pan.baidu.com/s/1c08gzi4(密碼為 puki)

1.5.2 QEMU 實驗平臺

QEMU 模擬了 vexpress Cortex-A9 SMP 四核處理器開發板,板上集成了 Flash、SD、 I2C、LCD 等。ARM 公司的 Versatile Express 系列開發平臺提供了超快的環境,用于為下一 代片上系統設計方案建立原型,比如 Cortex-A9 Quad Core。

在 http://www.arm.com/zh/products/tools/development-boards/versatile-express/index.php 上 可以發現更多關于 Versatile Express 系列開發平臺的細節。

本書配套虛擬機映像中已經安裝好了工具鏈,包含 arm-linux-gnueabihf-gcc 和 arm-linux- gnueabi-gcc 兩個版本。

Linux 內核在 /home/baohua/develop/linux 目錄中,在該目錄下面,包含內核編譯腳本:

第1章 Linux設備驅動概述及開發環境構建 11

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make LDDD3_vexpress_defconfig
make zImage -j8
make modules -j8
make dtbs
cp arch/arm/boot/zImage extra/
cp arch/arm/boot/dts/*ca9.dtb
cp .config extra/

由此可見,我們用的默認內核配置文件是 LDDD3_vexpress_defconfig。上述腳本也會自
動將編譯好的 zImage 和 dtbs 復制到 extra 目錄中。

extra 目錄下的 vexpress.img 是一張虛擬的 SD 卡,將作為根文件系統的存放介質。它能
以 loop 的形式被掛載(mount),譬如在 /home/baohua/develop/linux 目錄下運行。

sudo mount -o loop,offset=$((2048*512)) extra/vexpress.img extra/img

可以把 vexpress.img 的根文件系統分區掛載到 extra/img,這樣我們可以在目標板的根文
件系統中放置我們喜歡的內容。

/home/baohua/develop/linux 目錄下面有個編譯模塊的腳本 module.sh,它會自動編譯內核
模塊并安裝到 vexpress.img 中,其內容如下:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules

extra/

12 Linux設備驅動開發詳解:基于最新的Linux 4.0內核

sudo mount -o loop,offset=$((2048*512)) extra/vexpress.img extra/img
sudo make ARCH=arm modules_install INSTALL_MOD_PATH=extra/img
sudo umount extra/img

運行 extra 下面的 run-nolcd.sh 可以啟動一個不含 LCD 的 ARM Linux。run-nolcd.sh 的內
容為 qemu-system-arm -nographic -sd vexpress.img -M vexpress-a9 -m 512M -kernel zImage -dtb
vexpress-v2p-ca9.dtb -smp 4 -append "init=/linuxrc root=/dev/mmcblk0p1 rw rootwait earlyprintk
console=ttyAMA0" 2>/dev/null,運行結果為:

baohua@baohua-VirtualBox:~/develop/linux/extra$ ./run-nolcd.sh
Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Initializing cgroup subsys cpuset

Linux version 3.16.0+ (baohua@baohua-VirtualBox) (gcc version 4.7.3 (Ubuntu/
Linaro 4.7.3-12ubuntu1) ) #3 SMP Mon Dec 1 16:53:04 CST 2014

CPU: ARMv7 Processor [410fc090] revision 0 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: V2P-CA9
bootconsole [earlycon0] enabled
Memory policy: Data cache writealloc
PERCPU: Embedded 7 pages/cpu @9fbcd000 s7232 r8192 d13248 u32768
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 130048
Kernel command line: init=/linuxrc root=/dev/mmcblk0p1 rw rootwait earlyprintk

console=ttyAMA0
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 513088K/524288K available (4583K kernel code, 188K rwdata, 1292K rodata,

247K init, 149K bss, 11200K reserved)
Virtual kernel memory layout:

vector : 0xffff0000 - 0xffff1000
fixmap : 0xffc00000 - 0xffe00000
vmalloc : 0xa0800000 - 0xff000000
lowmem : 0x80000000 - 0xa0000000
modules : 0x7f000000 - 0x80000000

.text : 0x80008000 - 0x805c502c
.init : 0x805c6000 - 0x80603c40
.data : 0x80604000 - 0x80633100

( 4 kB)
(2048 kB)
(1512 MB)
( 512 MB)
( 16 MB)
(5877 kB)
( 248 kB)
( 189 kB)
( 150 kB)

.bss : 0x80633108 - 0x806588a8
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
Hierarchical RCU implementation.

RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
NR_IRQS:16 nr_irqs:16 16
L2C: platform modifies aux control register: 0x02020000 -> 0x02420000
L2C: device tree omits to specify unified cache
L2C: DT/platform modifies aux control register: 0x02020000 -> 0x02420000
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 dynamic clock gating disabled, standby mode disabled
L2C-310 cache controller enabled, 8 ways, 128 kB

L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x46420001
smp_twd: clock not found -2
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956969942ns
Console: colour dummy device 80x30
...

運行 extra 下面的 run-lcd.sh 可以啟動一個含 LCD 的 ARM Linux,運行結果如圖 1.11
所示。

圖 1.11 含 LCD 的 ARM Linux

除了 QEMU 模擬的 ARM 電路板以外,本書配套的 Ubuntu 中還包含一些直接可以
在 Ubuntu 上 運 行 的 案 例, 譬 如 /home/baohua/develop/training/kernel 中 就 包 含 了 globalfifo、
globalmem 等,這些目錄的源代碼都包含了 Makefile,在其中直接 make,生成的 .ko 可以直
接在 Ubuntu 上運行。

1.5.3 源代碼閱讀和編輯

源代碼是學習 Linux 的權威資料,在 Windows 上閱讀 Linux 源代碼的最佳工具是 Source Insight,在其中建立一個工程,并將 Linux 的所有源代碼加入該工程,同步這個工程之后, 我們將能非常便捷地在代碼之間進行關聯閱讀,如圖 1.12 所示。

類似 http://lxr.free-electrons.com/、http://lxr.oss.org.cn/ 這樣的網站提供了 Linux 內核源代 碼的交叉索引,在其中輸入 Linux 內核中的函數、數據結構或變量的名稱就可以直接得到以 超鏈接形式給出的定義和引用它的所有位置。還有一些網站也提供了 Linux 內核中函數、變 量和數據結構的搜索功能,在 google 中搜索“linux identifier search”可得。

在 Linux 主機上閱讀和編輯 Linux 源碼的常用方式是 vim + cscope 或者 vim + ctags,vim 是一個文本編輯器,而 cscope 和 ctags 則可建立代碼索引,建議讀者盡快使用基于文本界面 全鍵盤操作的 vim 編輯器,如圖 1.13 所示。

此時,我們只需要有一個感性認識,那就是,上述暫時陌生的元素都是 Linux 內核為字 符設備定義的,以實現驅動與內核接口而定義的。Linux 對各類設備的驅動都定義了類似的 數據結構和函數。

第2章
驅動設計的硬件基礎

本章導讀

本章講述底層驅動工程師必備的硬件基礎,給出了嵌入式系統硬件原理及分析方法的一 個完整而簡潔的全景視圖。

2.1 節描述了微控制器、微處理器、數字信號處理器以及應用于特定領域的處理器各自 的特點,分析了處理器的體系結構和指令集。

2.2 節對嵌入式系統中所使用的各類存儲器與 CPU 的接口、應用領域及特點進行了歸納 整理。

2.3 節分析了常見的外設接口與總線的工作方式,包括串口、I2C、SPI、USB、以太網接口、 PCI 和 PCI-E、SD 和 SDIO 等。

嵌入式系統硬件電路中經常會使用 CPLD 和 FPGA,作為驅動工程師,我們不需要掌握 CPLD 和 FPGA 的開發方法,但是需要知道它們在電路中能完成什么工作,2.4 節講解了這項 內容。

2.5 ~ 2.7 節給出了在實際項目開發過程中硬件分析的方法,包括如何進行原理圖分析、 時序分析及如何快速地從芯片數據手冊中獲取有效信息。

2.8 節講解了調試過程中常用儀器儀表的使用方法,涉及萬用表、示波器和邏輯分析儀。 2.1 處理器

2.1.1 通用處理器

目前主流的通用處理器(GPP)多采用 SoC(片上系統)的芯片設計方法,集成了各種功 能模塊,每一種功能都是由硬件描述語言設計程序,然后在 SoC 內由電路實現的。在 SoC 中,每一個模塊不是一個已經設計成熟的 ASIC 器件,而是利用芯片的一部分資源去實現某 種傳統的功能,將各種組件采用類似搭積木的方法組合在一起。

ARM 內核的設計技術被授權給數百家半導體廠商,做成不同的 SoC 芯片。ARM 的功耗 很低,在當今最活躍的無線局域網、3G、手機終端、手持設備、有線網絡通信設備等中應用 非常廣泛。至本書編寫時,市面上絕大多數智能手機、平板電腦都使用 ARM SoC 作為主控


總結

以上是生活随笔為你收集整理的《Verilog数字系统设计教程(第2版).pdf》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费成人蒂法网站 | 精品久久久噜噜噜久久久 | 国产一区二区三区精品在线观看 | 777精品久无码人妻蜜桃 | 欧美三级韩国三级日本三斤在线观看 | 六月婷婷激情 | 黄色高清视频 | 91久久久久久久久久久久久 | 韩国伦理中文字幕 | 手机看片福利一区 | 99久久人妻无码中文字幕系列 | 白丝动漫美女 | 国产日韩精品一区二区三区 | 国产精品美女www | 精久久久久久久 | 欧美成人精精品一区二区频 | 老师张开让我了一夜av | 日本性爱动漫 | 成人久久精品 | 成人亚洲电影 | 久草www | 日韩一二三四五区 | 麻豆传媒一区 | 国产日本一区二区三区 | 草草影院在线播放 | 久操视频在线 | 国产绿帽刺激高潮对白 | 欧美一区二区三区久久妖精 | 亚洲国产免费av | 极品超粉嫩尤物69xx | 美女网站黄频 | 九九国产视频 | 午夜精品久久久久久久四虎美女版 | 男人的天堂av网 | av激情久久 | 亚洲精品女人 | 欧美一区二区激情 | 动漫裸体无遮挡 | 91免费网站入口 | 久久av秘一区二区三区 | 亚洲性综合 | 91精品国产91久久久久 | 麻豆国产精品一区 | 小明成人免费视频 | 国产尤物视频在线 | 亚洲自拍偷拍综合 | 中文字幕网伦射乱中文 | 国产xxx在线 | 美女一区二区三区四区 | 曰批又黄又爽免费视频 | 成人精品视频网站 | 精品综合网 | 99热在线只有精品 | 99久久国产视频 | 免费无码不卡视频在线观看 | 亚洲成a人片在线www | 91蝌蚪91密月 | 日本美女影院 | 国产日韩一区 | 国产精品www色诱视频 | 日韩精品你懂的 | 国产成人免费视频网站 | 国产一级特黄a高潮片 | 大桥未久在线视频 | 影音先锋每日资源 | 黄色欧美一级片 | 亚洲精品成人无码毛片 | 国产情侣呻吟对白高潮 | 放荡闺蜜高h季红豆h | 亚洲精品免费在线观看视频 | 91传媒在线播放 | 五月天导航 | 日韩精品一区二区亚洲av观看 | 夜夜天天拍拍 | 天天爽夜夜 | 狂野欧美性猛交blacked | 国产精品探花一区二区三区 | 国产调教一区 | 欧美日韩午夜 | 女教师高潮黄又色视频 | 成人免费一级视频 | 不卡中文| 一本久草 | 污污的视频在线观看 | 视频在线播 | brazzers欧美一区二区 | 日韩电影一区二区 | 国模私拍av | 国模无码视频一区二区三区 | 麻豆精品视频在线观看 | 精品伦一区二区三区 | 国产美女www爽爽爽视频 | 永久免费AV无码网站韩国毛片 | 大又大又粗又硬又爽少妇毛片 | 深夜福利日韩 | 青青草成人免费视频 | 久青草影视| 国内久久精品 | 少妇真实被内射视频三四区 |