# **通訊軟體與驅動程式設計** **內容** 1. Linux OS 概論 2. Network Programming 3. Linux Kernel Module Programming **評分** 2,3 位同學一組 作業+期末口試 **大三以上同學** **軟體穩定是最基本的要求**: 請看 [軟體缺失導致的危害, 請看 波音 787 自動關機, 還有 race condition, 缺乏妥善同步機制引發美國大面積停電](https://hackmd.io/@sysprog/software-failure) 我自己的經驗是 GPS 給的資料是錯的, 這就是 **容錯**的例子, 還有 認識的朋友 RAID 壞的是 控制卡 不是 硬碟…還好 有 off-line 備份 還能 救回一些 資料 除了 **off-line 備援** 還需 **異地 備援**~怕 不可抗拒 的意外(火災 地震…) 這兩個錯誤 都是 基礎觀念 (也是習慣不好)沒建立好而造成~**寫軟體只是 交 作業的心態** Mathematics (calculus, linear algebra, probability, statistics), DSP, Data Structure, Algorithm, Micro-processor and OS **是內功心法** network programming, embedded system **是戰鬥工法** **要有內功 才會有好的自學能力與進步** 先修課程 **計算機概論 尤其 c 語言能力** 微處理機 資料結構 如doubly linked list 修過 作業系統尤佳 **網路 TCP/IP 知識 (至少 rfc1180: A TCP/IP Tutorial), ethernet, PPP, PPPoE, Routing (iproute2), …** [Data Structure Visualizations](https://www.cs.usfca.edu/~galles/visualization/) **自學部分** 計概+ c language: ANSI C for Programmers on UNIX Systems, Tim Love (含 **習題, makefile 一定要會**) 紮實的c語言, 因為本課程 有 linux kernel module 實作. 如果 c language 不行 又沒 自學, 勸您 別修這門課 練習 看 man page 重要的 return value, data type (最好用 man page 裡的型態), errors, thread-safity … **OS: Design of the UNIX Operating System**, Maurice J. Bach, MMU, virtual memory, scheduling, file system, system calls,… **<h1>自己練習 Linux 使用 (用VirtualBox)****</h1>** **請用xterm 練習** Linux commands: vim, nano, wget, sudo, cd, ls, cp, cat, more, find, ln, grep, ps, chmod, chown, tar, mkdir, rm, rmdir, df, du, kill, echo, ping, strace, top, man, strip route, ifconfig, arp, pstree, touch, netstat, ldd, pstree, objdump, gunzip, gzip, bzip2, dmesg, pwd, which, iptables, brctl, iproute2: ip commands (ip route, ip addr, …), mount, umount, adduser, gcc, traceroute, uname, lsof, … **Wireshark, MobaXterm, VirtualBox, QEMU, …** VirtualBox: Create Ubuntu 16.04.7 (**最好有40G**, two NICs (NAT Mode and Bridged Mode)) win32 editor: 個人覺得 Komodo Edit 不錯 雖然 vim 沒 nano 好用, **但實務上 可能只有 vim 能用**~ iproute2 很多取代 ifconfig 與 route Linux 使用 (請自學, 例如 https://blog.gtwang.org/linux/linux-io-input-output-redirection-operators/ , https://linux.vbird.org/linux_basic/centos7/) **課程內容:** [Linux Network Programming](https://hackmd.io/@pingulinux/Linux-Network-Programming) [Embedded (Linux) System Design](https://hackmd.io/@pingulinux/embedded)