作業1
make x86_64_defconfig
make LLVM=1 menuconfig
報錯,解決 sudo apt install lld
配置介面:
接下來編譯
make LLVM=1 -j 12
作業2
問題1:
在Kconfig中有相關的配置,具體在:
obj-m := r4l_e1000_demo.o
由於是obj-m 所以會按照模組編譯
問題2:
透過insmod,可以將out-of-tree 的module掛載到核心中驅動的管理連結串列中,就和直接掛載的驅動沒有大的區別,可以直接訪問核心空間。
禁用C的e1000網路卡
掛載e1000網路卡,並setup
insmod r4l_e1000_demo.ko
ip link set eth0 up
ifconfig eth0 broadcast 10.0.2.255
ip addr add 10.0.2.15/255.255.255.0 dev eth0
ip route add default via 10.0.2.1
ping 10.0.2.2
作業3
編譯後將ko檔案放到rootfs下,啟動qemu後用insmod掛載就會有下面的輸出
作業4
作業5
得到cicv的主次裝置號
ls /dev/cicv -al
可以看到是248 0
在 build_image.sh
指令碼中也有對應掛載的語句
/proc/devices
中配置將248分配給rust_chrdev
在module!中以後對應的name欄位,從而將248分配給了rust_chrdev
修改部分
結果:
測驗
mount -t nfs -o nolock host_machine:/home/alan/Project/Rust/OS-4/cicv-r4l-3-lliYanze/r4l_experiment/driver /mnt
按照文件操作後,最終實現
先用最簡單的驅動測試