ドキュメントの場所
https://www.kernel.org/doc/html/v5.14/
The Linux Documentation Project
linuxのkernelのソースコード取得
https://www.kernel.org/からtar ballを取得するか
gitで取得する。
ドキュメントの場所
https://www.kernel.org/doc/html/v5.14/
The Linux Documentation Project
linuxのkernelのソースコード取得
https://www.kernel.org/からtar ballを取得するか
gitで取得する。
ラズベリーパイのKernelをx86 Linux クロスコンパイル環境で作成する。
開発環境は、Raspberry Pi OSと同じDebian系のubuntuがよく使われるようである。
1. 開発環境のインストール
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
64bit kernel用の環境
sudo apt install crossbuild-essential-arm64
2. ソースコードの入手(最小構成)
git clone --depth=1 https://github.com/raspberrypi/linux
3. 64bit Raspberry Pi 4のconfig作成
cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
4. 64bit build
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
-j N をつけるとコア数に応じて早くビルドできる
Nは、コア数の1.5倍
githubからidとpasswordでgit cloneしたらgithubから怒られました。
2021年8月頃にidとpasswordでは、操作できなくなるそうです。(詳細)
少しハマったのでキーの作成方法と公開キーの登録方法をメモしておきます。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
catで表示してコビーペーストでも問題ない。
2. 左端のメニューの"SSH and GPG keys"
3. 右上の"New SSH key"
$ ssh -T git@github.com
The authenticity of host 'github.com (52.192.72.89)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes <== 入力 Warning: Permanently added 'github.com,52.192.72.89' (RSA) to the list of known hosts. Hi user-ID! You've successfully authenticated, but GitHub does not provide shell access.
または
Hi user-ID! You've successfully authenticated, but GitHub does not provide shell access.
$ git clone git@github.com:abcd/efghi.git
セキュリティの問題から、ブラウザのjavascriptから直接ファイルの操作はできない。
Blobを作成して、アンカーに紐づけダウンロードすることによりファイルを出力できる。
window.onload = () => { let data = Array("abcdefg", "xxxxx"); let blob = new Blob(data, {type: "text/plan"}); let link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = 'testfile.txt'; link.click(); };
Internal methods and internal slots are identified within this specification using names enclosed in double square brackets [[ ]].(© Ecma International 2020)
[[ ]]は、ECMAScriptでの表記方法
普通のオブジェクト(ordinary object)は、[[Prototype]]を持っています。
[[Prototype]]は、nullまたは、他のオブジェクトの参照を持っています。
普通にオブジェクトを作成すると、[[Prototype]]は、Object.protorypeの参照を持ちます。
例
let obj1 = {}; let obj2 = {}; let obj3 = Object.create(obj1); // [[Protorype]]は、obj1 Object.prototype.my_prop = "AAA" // すべてAAAが表示される。 alert(obj1.my_prop); alert(obj2.my_prop); alert(obj3.my_prop); alert("abc".my_prop); // 文字列も[[Protorype]]を持っており、最終的にObject.prototypetが参照される。
__proto__は、[[prototype]]にアクセスするための特殊なプロパティーである。色々なブラウザに実装され、デファクト・スタンダードとなった。現在では非推奨である。
代わりに
Object.create(proto, [descriptors])
Object.getPrototypeOf(obj)
Object.setPrototypeOf(obj, proto)
を使う。
__proto__ の例
let obj1 = { prop1 : "ABC" } let obj2 = { __proto__ : obj1 } alert(obj2.prop1); // ABCが表示される。obj2.__proto__.prop1 (obj1.prop1)が参照される。 obj2.__proto__ = "TEST"; // プリミティブは代入できない。 alert(obj2.__proto__); // [object Object]が表示される。 obj2.__proto__ = { prop1 : "XXX" }; // オブジェクトは代入できる。 alert(obj2.prop1); // XXXが表示される。
objectをmapとして使用した場合、画面入力からキーとバリューを作成した場合、キーに"__proto__"が入力された場合問題が発生する。
Object.create(null);を使うことにより、__proto__の無いオブジェクトが作成できる。
例
let obj3 = Object.create(null); // [[prototype]] が、nullになる obj3.__proto__ = "TEST"; alert(obj3.__proto__); // TESTが表示される。 obj3.__proto__ = { prop1 : "XXX" }; alert(obj3.prop1); // undefined alert(obj3.__proto__.prop1); // XXXが表示される。
JSXを使ってweb siteを開発する場合の手順(Babel)
1. node.jsをインストール(参考)
2. プロジェクトフォルダーを作成する。
3. プロジェクトフォルダーで下記コマンドを実行
$ npm init -y
$ npm install babel-cli@6 babel-preset-react-app@3
以上で開発環境の準備終了
プロジェクトに、srcとjsというフォルダを準備し
下記コマンドを実行する。
$ npx babel --watch src --out-dir js --presets react-app/prod