Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
時の流れが許せない
Search
KOBA789
May 11, 2025
0
8
時の流れが許せない
Kernel/VM探検隊@北陸 Part 7 で発表した内容です。
KOBA789
May 11, 2025
Tweet
Share
More Decks by KOBA789
See All by KOBA789
ついに生産が終わったけどZ80でまだまだ遊びたい
koba789
5
4.1k
ISUCONの練習を楽しくたくさんやる方法
koba789
2
1.2k
Z80をRustで動かすまで年が越せない
koba789
0
180
ISUCON練習環境を最も簡単に用意する方法
koba789
2
3.2k
音をアレする
koba789
0
870
メガネとBluetooth Low Energyでお喋りする
koba789
0
1.6k
Rustでon-diskなB+Treeを作ったときの細かな話
koba789
11
1.8k
音の出るCPUを作っている途中
koba789
5
4.6k
自宅サーバーでbottlerocketを動かしてk8sクラスタを組む
koba789
1
1.2k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
420
For a Future-Friendly Web
brad_frost
177
9.7k
Embracing the Ebb and Flow
colly
85
4.7k
GitHub's CSS Performance
jonrohan
1031
460k
Scaling GitHub
holman
459
140k
The World Runs on Bad Software
bkeepers
PRO
68
11k
Code Review Best Practice
trishagee
67
18k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
Producing Creativity
orderedlist
PRO
344
40k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Transcript
KOBA789 ࣌ͷྲྀΕ͕ڐͤͳ͍ ,FSOFM7.୳ݕୂ!1BSU
KOBA789 పͰ͔ͭ͘ΒंͰདྷ·ͨ͠ʢ৸ෆʣ w ࣄͷ͠·ͤΜ w ࣄͷ͠·ͤΜʢʣ w ͏͔ͬΓձࣾͷ1$Λ͖࣋ͬͯͨͷͰ͍ͭͷࣗݾհςϯϓϨʔτ͕ͳ͍
None
ಈ͘Α͏ʹͳΓ·ͨ͠ ΫϦελϧͷཪ໘ʹ৴߸ઢ͕௨ͬͯͯΫϩοΫ͕Ε͍ͯͨͷ͕ݪҼ
࣌ͷྲྀΕ͕ڐͤͳ͍
Έͳ͞Μͦ͏Ͱ͢Ͷʁ
ࢲͩͬͯͦ͏ͩ
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ .$6 # .$6 " lz
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ #ͷ࣌ܭ͕ͪΐͬͱ͚ͩΕΔ .$6 # .$6 " lz
ͭͷϚΠίϯͰ࣌ࠁΛಉظ͍ͨ͠ ΈΜͳେ͖6"35ͰλΠϜελϯϓΛૹΔ #ͷ࣌ܭ͕ͪΐͬͱ͚ͩΕΔ .$6 # .$6 " lz ͳ͔ͥʁ
6"35ͷΈ CBVEͳΒ#ZUFૹΔͷʹNT͔͔Δ https://vanhunteradams.com/Protocols/UART/UART.html <CJU><CJUT>˺<NT> ੨͍෦KOBA789ʹΑΔՃච
6"35ͷΈ #ZUFͷ࣌ࠁΛૹͬͨΒNTԆ͢Δ .$6# .$6" NT #ͷ࣌ܭ͕NTΕΔ
6"35ͷΈ #ZUFͷ࣌ࠁΛૹͬͨΒNTԆ͢Δ .$6# .$6" NT #ͷ࣌ܭ͕NTΕΔ NT
Ҿ͍ͨΒʁ
·͊Ԇ͕ίϯελϯτͳΒ ͦΕͰ͍͍ΜͰ͢Α
͕ͩࣄଶͦ͏୯७Ͱͳ͍
let time = gettimeofday(); send(time);
let time = gettimeofday(); send(time); ߦ͕࣮ߦ͞Ε͔ͯΒ ߦ͕࣮ߦ͞ΕΔ·ͰͷԆʁ
ߦͱߦͷؒʹ͋ΔԆ Α͋͘Γ͕ͪͳϚΠίϯͷ߹ w ී௨ʹ໋ྩ࣮ߦʹ͔͔ΔαΠΫϧ͚ͩԆ͢Δ w ༏ઌͷߴׂ͍ΓࠐΈ͕ೖΕԆ͢ΔʢཁΫϦςΟΧϧηΫγϣϯʣ w ࠷ۙͷϚΠίϯͰ w $16͕͍͗ͯ͢Ζ͍Ζ͕૬ରతʹ͍ͷͰΩϟογϡ͕͋Δ
w ΩϟογϡώοτPSOPUͰԆ͕࣌ؒมԽʢඇܾఆతʣ w 5$.ͱ͔͑ϚγʹͳΔ͕ w 0VUPG0SEFS࣮ߦ͢Δ w ίʔυಡΉ͚ͩͰԆ͕࣌ؒΘ͔Βͳ͍ʢࣄ্࣮ඇܾఆతʣ
let time = gettimeofday(); send(time);
let time = gettimeofday(); send(time); ͦͦTFOE ͷ࣮ʁ
Α͋͘Δ6"35ૹ৴ϖϦϑΣϥϧʢงғؾʣ ૹ৴'*'0 5%3 ͕ϝϞϦϚοϓ͞Ε͍ۭͯͯʹͳΔͱׂΓࠐΈ͕ೖΔ 4IJGU SFHJTUFS EFQUI '*'0 59 %"5"
όε $16 %"5" '*'0&NQUZ *OUFSSVQU 5%3
5%3ʹΛॻ͖ࠐΉͱૹ৴͞ΕΔ ͨͱ͑5%3ͷΞυϨεΛY@ͱ͢Δ *(uint32_t*)0x400001000 = 'A'; core::ptr::write_volatile(0x400001000 as *mut u8, b'A');
5%3ʹΛॻ͖ࠐΉͱૹ৴͞ΕΔ EFQUI'*'0ͳΒจࣈ·ͰҰؾʹॻ͚Δ͕ɺӽ͑ΔͱᷓΕΔ core::ptr::write_volatile(0x40000100 as *mut u8, b'0'); core::ptr::write_volatile(0x40000100 as *mut
u8, b'1'); core::ptr::write_volatile(0x40000100 as *mut u8, b'2'); core::ptr::write_volatile(0x40000100 as *mut u8, b'3'); core::ptr::write_volatile(0x40000100 as *mut u8, b'4'); core::ptr::write_volatile(0x40000100 as *mut u8, b'5'); core::ptr::write_volatile(0x40000100 as *mut u8, b'6'); core::ptr::write_volatile(0x40000100 as *mut u8, b'7'); core::ptr::write_volatile(0x40000100 as *mut u8, b'8'); core::ptr::write_volatile(0x40000100 as *mut u8, b'9'); core::ptr::write_volatile(0x40000100 as *mut u8, b'A'); core::ptr::write_volatile(0x40000100 as *mut u8, b'B'); core::ptr::write_volatile(0x40000100 as *mut u8, b'C'); core::ptr::write_volatile(0x40000100 as *mut u8, b'D'); core::ptr::write_volatile(0x40000100 as *mut u8, b'E'); core::ptr::write_volatile(0x40000100 as *mut u8, b’F'); // ͔͜͜ΒઌᷓΕΔ
Α͋͘Δ6"35υϥΠόʢงғؾʣ %."ͷ͜ͱҰ୴Ε͍ͯͩ͘͞ w TFOE w ·ͣ'*'0ͷۭ͖༰ྔ͚ͩॻ͘ w ᷓΕͨιϑτΣΞόοϑΝʹॻ͘ w
&NQUZ'*'0ׂΓࠐΈ w '*'0ͷۭ͖༰ྔ͚ͩιϑτΣΞόοϑΝ͔ΒҠ͢
͏͓͔ΓͰ͢Ͷʁ
όοϑΝɾ'*'0͕ ٧·ͬͯͨΒ ଈ࠲ʹૹ৴͞Εͳ͍ ʢͦΕͦ͏ʣ
ͯ͞
Α͋͘Δ6"35ड৴ϖϦϑΣϥϧʢงғؾʣ ड৴'*'0 3%3 ͕ϝϞϦϚοϓ͞Ε͍͕ͯͯདྷΔͱׂΓࠐΈ͕ೖΔ 4IJGU SFHJTUFS EFQUI '*'0 39 %"5"
όε $16 %"5" '*'0/PO&NQUZ *OUFSSVQU 3%3
3%3͔ΒΛಡΉͱ'*'0͔ΒQPQ͞ΕΔ ͨͱ͑3%3ͷΞυϨεΛY@ͱ͢Δ uint8_t r = *(uint32_t*)0x40000200; // r == 'A'
let r = core::ptr::read_volatile(0x40000100 as *const u8); // r == b’A'
Α͋͘Δ6"35υϥΠόʢงғؾʣ %."ͷ͜ͱҰ୴Ε͍ͯͩ͘͞ʢʣ w /POFNQUZ'*'0ׂΓࠐΈ w '*'0ͷ༰ΛιϑτΣΞόοϑΝʹҠ͢ w ͜ΕΛ͠ͳ͍ͱ'*'0༰қʹᷓΕΔ w SFDW
w ιϑτΣΞόοϑΝ͔ΒಡΈग़͢
ड৴σʔλͷಡΈऔΓ͍͘ΒͰԆ͢Δ ͏͓Θ͔ΓͰ͢Ͷʢʣ w ΞϓϦέʔγϣϯ͕ιϑτΣΞόοϑΝΛ͍ͭಡΉ͔ࣗ༝ w ׂΓࠐΈϋϯυϥ͕ݺΕΔλΠϛϯάʜʜʁ w ΞςʹͳΒͳ͍ w ผͷΫϦςΟΧϧηΫγϣϯͰεϐϯϩοΫͯͨ͠ΒΕΔ
w $PSUFY.ͰׂΓࠐΈͷԣऔΓͱ͔ͰϨΠςϯγ͕ζϨΔ
ࠔΔ
ࠔΔͷͰɺΑ͋͘Δํ๏ʢ6"35 114ʣ ඵ͝ͱʹύϧεΛೖྗ͠ɺͦΕΛϋʔυΣΞͰΩϟϓνϟ͢Δ .$6 # .$6 " lz ʮࠓͰ͢ʂʯ
*OQVU$BQUVSF0VUQVU$PNQBSF ΠέͯΔϚΠίϯͷλΠϚʹ͍͍ͩͨ͋Δ w *OQVU$BQUVSF w ύϧεೖྗΛτϦΨʔʹͯ͠ɺΧϯλͷΛϨδελʹΩϟϓνϟ w ιϑτΣΞͷλΠϛϯάʹґଘͤͣਖ਼֬ͳλΠϛϯά͕औΕΔ w (1*0ׂΓࠐΈͱશ͘ผͷػೳ
w 0VUQVU$PNQBSF w ΧϯλͷΛτϦΨʔʹͯ͠ɺύϧεΛग़ྗ w ιϑτΣΞͷλΠϛϯάʹґଘͤͣʢSZ
ΊͰͨ͠ΊͰͨ͠ʢʁʣ
ݪཧతʹཱ͍ͯ͠Δ͕ݱ࣮తʹࠔΔ 6"35࣌ࠁ৴ઐ༻Ͱͳ͍ɻଞͷίϚϯυૹΓ͍ͨ .$6 # .$6 " lz ʮࠓͰ͢ʂʯ $.%@%0@40.&5)*/( ࠞͬͯ͟͠·͏
6"35ʹྲྀΕΔσʔλΛผ͍ͨ͠ ͜ͷΜͷεϥΠυ͕Ͱ͖ͯͳ͍ w σʔλΛผ͢ΔʹϔομΛ͚Δͷ͕ৗखஈ w ϔομΛ͚Δʹύέοτࢦ͡Όͳ͍ͱ͍͚ͳ͍ w ͱ͜ΖͰ6"35ͨͩͷΕͷͳ͍όΠτετϦʔϜ w ύέοτʹ͢Δʹϓϩτίϧ͕ඞཁ
w ͔͠ඪ४Խ͞Εͯͳ͍ͱඍਖخ͘͠ͳ͍
͜ͷΜͷεϥΠυ͕Ͱ͖ͯͳ͍
͏݁ߦͧ͘
151 1SFDJTJPO5JNF1SPUPDPM &UIFSOFU্Ͱ/51ΑΓਫ਼ີͳ࣌ࠁಉظΛ͢Δϓϩτίϧ w ൃͱͯ͠/51ͱಉ͡ʢԟ෮ͰϨΠςϯγΛଌΔʣ w େ͖ͳҧ͍ϋʔυΣΞλΠϜελϯϓͷαϙʔτ w &UIFSOFUϑϨʔϜͷ4'%͕1):Λ௨աͨ͠ॠؒͷΧϯλͷΛ ϋʔυΣΞͰΩϟϓνϟ͢Δ
w ΑΓਫ਼ີʹϨΠςϯγ͕ଌΕΔͷͰVTʙOTΦʔμʔͷਫ਼͕ૂ͑Δ w ࣮ࡍʹͬͱ͍Ζ͍Ζ͋Δ͕ɺ͜͜ʹॻ͘ʹ४උ͕࣌ؒΒͳ͗͢͞Δ
151 1SFDJTJPO5JNF1SPUPDPM &UIFSOFU্Ͱ/51ΑΓਫ਼ີͳ࣌ࠁಉظΛ͢Δϓϩτίϧ .$6 # .$6 "
31J$.ͱळ݄ͷ(14ϞδϡʔϧͰ࡞ΕΔ ͜ͷهࣄಡΜͩΒ؆୯ʹ࡞ΕΔͱࢥ͏ https://www.je ff geerling.com/blog/2022/ptp-and-ieee-1588-hardware-timestamping-on-raspberry-pi-cm4
/VDMFP 45. ͰΕಈ͘ ୭151ͳΜͯͬͯͳ͍ͷͰؾ߹ೖΕ࣮ͯ͢Δඞཁ͋Δ
ͱͳΔͱؾʹͳΔ͜ͱ͕ ͋Γ·͢Ͷʁ
Ϣʔβʔϥϯυͷ"1* Ͳ͏ͳͬͯΜͩ
#4%TPDLFUʹ λΠϜελϯϓऔΔ"1*ͳ͍
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new ΤϥʔΩϡʔʹ ใࠂ͞ΕΔ
·ͣTFUTPDLPQUͰઃఆ͢Δ https://docs.kernel.org/networking/timestamping.html#so-timestamping-also-so-timestamping-old-and-so-timestamping-new ʁʁʁ
λΠϜελϯϓ ΠϯλʔϑΣʔεΛ ഁյͯͭ͠Β͍ ʢਫ਼ӠʑΑΓͦΕ͕ͭΒ͍ʣ