Compare commits

...

147 Commits

Author SHA1 Message Date
Takumi Sueda
0c7861189b
Merge pull request #57 from brain-hackers/ci-next
Upgrade submodules etc.
2024-02-03 23:26:06 -08:00
Takumi Sueda
4257f2465a Workaround workaround 2024-02-04 16:13:11 +09:00
Takumi Sueda
24e5428c62 Build U-Boot specially made for PW-A7400 2024-02-04 16:13:11 +09:00
Takumi Sueda
086c5b08f5 Add x11-ico-dvd, remove weston and xwayland 2024-02-04 16:13:11 +09:00
Takumi Sueda
9d65cf08dd Update linux-brain, u-boot-brain, and brainlilo 2024-02-04 16:13:08 +09:00
Takumi Sueda
68e6e1091e
Merge pull request #56 from brain-hackers/buildroot-experiment
Enhance buildroot rootfs
2023-07-31 22:24:07 +09:00
Takumi Sueda
ce8d780b33 Enhance blink.sh 2023-07-31 22:09:11 +09:00
Takumi Sueda
b561fdaec9 buildroot: specify an override directory to add files into the buildroot rootfs 2023-07-31 18:34:50 +09:00
Takumi Sueda
611706771f
Merge pull request #55 from brain-hackers/readme
Update README
2023-07-29 01:36:35 +09:00
Takumi Sueda
2fa3904480 Update README 2023-07-29 01:35:28 +09:00
Takumi Sueda
3479812f91
Merge pull request #54 from brain-hackers/ci-buildroot
Add buildroot rootfs target and SD image target
2023-07-29 01:17:07 +09:00
Takumi Sueda
94d37b1b76 Add buildroot w/ Brain board definition 2023-07-29 00:24:37 +09:00
Takumi Sueda
d6719fd49f Enhance build scripts to generate a buildroot SD image 2023-07-29 00:24:37 +09:00
Takumi Sueda
1de1747fbb Add buildroot submodule 2023-07-29 00:24:37 +09:00
Takumi Sueda
d885ca6bc1
Merge pull request #53 from brain-hackers/ci-fix
Fix CI and integrate additional systemd units
2023-07-29 00:23:32 +09:00
Takumi Sueda
b242f06d78 Copy systemd units before setup 2023-07-28 21:40:02 +09:00
Takumi Sueda
d534aa7416 Call daemon-reload before enabling boot.mount 2023-07-24 17:40:55 +09:00
Takumi Sueda
870363a92e Use the latest checkout action 2023-07-24 17:39:08 +09:00
Takumi Sueda
8ca8a3ab12
Merge pull request #52 from brain-hackers/misc
Misc. addition
2023-03-27 20:01:31 +09:00
Takumi Sueda
33e3afbf13 Enable RNDIS gadget automatically 2023-03-27 19:55:11 +09:00
Takumi Sueda
bc2c108d77 Mount /boot automatically 2023-03-21 18:01:11 +09:00
Takumi Sueda
ee93757ff1
Merge pull request #51 from brain-hackers/ci-ly-fix
Switch ly repository to freeze the source code
2023-01-18 04:25:37 +09:00
Takumi Sueda
9f41a0bbd2 Switch ly repository to freeze the source code 2023-01-10 19:14:57 +09:00
Takumi Sueda
9671252f5d
Merge pull request #50 from brain-hackers/ci-bullseye
Change the base rootfs to bullseye
2022-12-21 13:11:01 +09:00
Takumi Sueda
935363d6ac Change the base rootfs to bullseye
It is unintentionally reverted back to buster
2022-12-21 13:09:18 +09:00
Takumi Sueda
25668a72e3
Merge pull request #49 from brain-hackers/bump
Update linux-brain: update keyboard driver & maximize brightness
2022-12-08 01:03:01 +09:00
Takumi Sueda
d7da4a6e44 Update linux-brain: update keyboard driver & maximize brightness 2022-12-08 01:02:34 +09:00
Takumi Sueda
8f3f63be44
Merge pull request #48 from brain-hackers/ci-timesyncd
Add systemd-timesyncd & revert back issue and os-release
2022-11-24 00:23:56 +09:00
Takumi Sueda
a4350f303c Fix sudoers 2022-11-23 23:28:22 +09:00
Takumi Sueda
f7a20f61b7 Revert back issue and os-release 2022-11-23 23:20:09 +09:00
Takumi Sueda
2ecec60001 Add systemd-timesyncd 2022-11-23 23:14:38 +09:00
Takumi Sueda
eaa027db98
Merge pull request #47 from brain-hackers/sudoer
Show asterisks in sudo
2022-11-23 23:07:09 +09:00
Takumi Sueda
53e39a8bb6 Show asterisks in sudo 2022-11-23 23:00:06 +09:00
Takumi Sueda
453fe8d60f
Merge pull request #46 from brain-hackers/ci-update
Bump versions
2022-11-23 02:06:05 +08:00
Takumi Sueda
e7d3c4629a G5300 -> A7200 2022-11-23 01:23:39 +09:00
Takumi Sueda
57c5052909 Update BrainLILO: support 1G
1G is supported by no one else though
2022-11-23 00:14:58 +09:00
Takumi Sueda
84960b1471 Update u-boot-brain: unify 2G, update env 2022-11-23 00:12:11 +09:00
Takumi Sueda
515aff62be Update linux-brain: unify 2G, enable UAC 2022-11-23 00:11:29 +09:00
Takumi Sueda
6cf0f749d4
Merge pull request #44 from brain-hackers/fix
Fix
2022-11-13 20:35:42 +08:00
Takumi Sueda
7ca8ed3cc1 Install ly service 2022-11-13 21:35:03 +09:00
Takumi Sueda
f444f68a3b Install ca-certificates 2022-11-13 11:48:38 +09:00
Takumi Sueda
f503ef87ef
Merge pull request #43 from brain-hackers/license
Add exeopener license agreement
2022-11-04 10:36:54 +09:00
Takumi Sueda
3f4afedf45 Add exeopener license agreement
as per the body approved by the original author
2022-11-03 00:39:09 +09:00
Takumi Sueda
5e92df0600 Update u-boot-brain 2022-08-27 16:30:48 +09:00
Takumi Sueda
e09c0ba017
Merge pull request #42 from brain-hackers/sh4
Update linux-brain: add SH4 keymap
2022-08-07 18:27:53 +09:00
Takumi Sueda
d74ba8a70f Update linux-brain: add SH4 keymap 2022-08-07 18:27:09 +09:00
Takumi Sueda
ec695f99f0
Merge pull request #41 from brain-hackers/ci-brain-config
Pre-install brain-config
2022-08-07 18:24:24 +09:00
Takumi Sueda
22235e8cf0 Install brain-config from packagecloud 2022-08-07 14:32:11 +09:00
Takumi Sueda
9529327097 Refactor apt install 2022-08-07 14:32:11 +09:00
Takumi Sueda
7e2b04ce18
Merge pull request #40 from brain-hackers/ci-optionalnk
Disable nk.bin boot loader injection by default etc.
2022-07-12 00:16:54 +09:00
Takumi Sueda
8c7118f0b2 Append a suffix by the tag
Conflicting tag name is now invalid
2022-07-11 20:15:34 +09:00
Takumi Sueda
7a34055ef3 Name the new volumes 2022-07-11 20:15:34 +09:00
Takumi Sueda
d64a316b1f Disable nk.bin boot loader injection by default 2022-07-11 20:15:29 +09:00
Takumi Sueda
d5ab036801
Merge pull request #39 from brain-hackers/ci-exeopener
Launch BrainLILO via exeopener
2022-05-30 17:06:46 +09:00
Takumi Sueda
fe480d7b91 Launch BrainLILO via exeopener 2022-05-30 14:38:58 +09:00
Takumi Sueda
e15ce44891
Merge pull request #38 from brain-hackers/ci-package
Re: Add pre-install package (ci-package -> master)
2022-05-17 01:58:09 +09:00
Takumi Sueda
0509bbbe6f
Merge pull request #37 from Codex340/master
Add pre-install package
2022-05-17 00:46:48 +09:00
Codex340
a2295ecb55
Update setup_brainux.sh 2022-05-16 18:15:36 +09:00
Takumi Sueda
07c32f712f
Merge pull request #35 from brain-hackers/gitmodules-url
.gitmodules: align URLs to "https ... .git"
2022-05-15 00:38:12 +09:00
watamario15
89b4c120a2
.gitmodules: align URLs to "https ... .git" 2022-05-14 21:14:19 +09:00
Takumi Sueda
1a4d1cd39a
Merge pull request #34 from brain-hackers/ci-newlilo
2022-05-10
2022-05-10 02:03:19 +09:00
Takumi Sueda
d8aa77a29f Update linux-brain: add SH6 keymap 2022-05-10 00:53:05 +09:00
Takumi Sueda
93de849023 Pre-install BrainLILO / enable G2 build 2022-05-10 00:51:47 +09:00
Takumi Sueda
0eb94960ca
Merge pull request #33 from brain-hackers/brainlilo
Add BrainLILO
2022-05-06 02:17:25 +09:00
Takumi Sueda
7299377004 Add BrainLILO 2022-05-06 00:16:15 +09:00
Takumi Sueda
b90386fbd2
Merge pull request #32 from brain-hackers/ci-build20220125
Fix CI build
2022-04-08 01:11:30 +09:00
Takumi Sueda
f7e1dbeadf Specify DEBIAN_FRONTEND to suppress interactive installation 2022-02-27 22:49:35 +09:00
Takumi Sueda
6bc1d44016 Create parent directories with the correct permission 2022-02-27 22:49:06 +09:00
Takumi Sueda
8bc1c15958 Fix image name 2022-02-19 04:05:33 +09:00
Takumi Sueda
ffb3590060 Build boot4u 2022-02-19 03:26:55 +09:00
Takumi Sueda
45990eac88 Make directory with su privilage 2022-02-19 02:20:38 +09:00
Takumi Sueda
b9b99be34a Specify CROSS_COMPILE 2022-02-19 02:20:01 +09:00
Takumi Sueda
c3a5dbfe22 Update u-boot-brain 2022-02-19 01:30:48 +09:00
Takumi Sueda
d30ec39b6b Fix defconfig target 2022-02-19 01:05:54 +09:00
Takumi Sueda
152854cd1d
Merge pull request #31 from brain-hackers/fix-misc
Fix misc
2022-02-14 01:20:29 +09:00
Takumi Sueda
c8e7e32db5 Update linux-brain 2022-02-14 01:17:22 +09:00
Takumi Sueda
32ba6d3825 Brainux: fix invalid Git args 2022-02-14 01:11:40 +09:00
Codex340
0a39083d9e
Update how Ly is built. (#30)
Fix ly build.

Co-authored-by: Takumi Sueda <puhitaku@gmail.com>
2022-02-13 18:05:09 +09:00
Takumi Sueda
14275cdb60
Merge pull request #29 from brain-hackers/nkbinmaker_fix
bring back nkbin_maker
2022-01-25 10:51:26 +09:00
d5b86adc1c bring back nkbin_maker 2022-01-25 05:32:19 +09:00
Takumi Sueda
621a5e0b9a
Merge pull request #28 from brain-hackers/reishoku/dependency-modification 2022-01-15 14:13:29 +09:00
KOSHIKAWA Kenichi
899aac01d9 README.md: add python3-pip and libyaml to dependency
Signed-off-by: KOSHIKAWA Kenichi <reishoku.misc@pm.me>
2022-01-14 00:29:32 +09:00
Takumi Sueda
627b8212ec
Merge pull request #27 from brain-hackers/u-boot-202104
Update u-boot-brain to 2021.04
2021-12-26 20:37:09 +09:00
Takumi Sueda
e7f9e3f7a5 Update u-boot-brain to 2021.04 2021-12-26 20:35:13 +09:00
Takumi Sueda
162f065148
Merge pull request #26 from brain-hackers/x1s
Ready for PW-x1
2021-12-23 03:32:02 +09:00
Takumi Sueda
0ecb9895ac Update linux-brain and u-boot-brain 2021-12-23 03:28:31 +09:00
Takumi Sueda
2c89ef57d1 Brainux for x1 2021-12-07 23:01:31 +09:00
Takumi Sueda
5689b3a04e
Merge pull request #25 from brain-hackers/bullseye
Upgrade to Bullseye
2021-12-07 22:26:59 +09:00
Takumi Sueda
12a69402c6 Remove openbox and friends 2021-12-07 21:08:10 +09:00
Takumi Sueda
04987d3792 Specify LANG env to prevent warnings 2021-12-07 21:07:56 +09:00
Takumi Sueda
9c56c4175a Correct repository path 2021-12-07 21:04:28 +09:00
Takumi Sueda
23790bcf20 Fix setup of systemd in chroot-ed environment 2021-12-07 20:35:10 +09:00
Takumi Sueda
f82168e7b1
Merge pull request #21 from 20100074/release-upgrade-bullseye
Upgrade from buster to bullseye
2021-12-07 20:25:06 +09:00
Takumi Sueda
f77dc68e69
Merge pull request #20 from 20100074/update-dependencies
Add debootstrap and kpartx to dependencies
2021-08-28 11:40:34 +09:00
KOSHIKAWA Kenichi
c59b6d7738 fixup! Upgrade from buster to bullseye 2021-08-26 22:05:29 +09:00
KOSHIKAWA Kenichi
8ca448ad1f Upgrade from buster to bullseye 2021-08-26 21:57:59 +09:00
KOSHIKAWA Kenichi
46100619b0 fixup! Add debootstrap and kpartx to dependencies 2021-08-26 21:42:34 +09:00
KOSHIKAWA Kenichi
ccd54db033 Add debootstrap and kpartx to dependencies 2021-08-26 21:23:35 +09:00
Takumi Sueda
ccd1d72e64
Merge pull request #19 from unasuke/update_readme_qemu
Add qemu-user-static to dependencies
2021-05-09 00:55:18 +09:00
Yusuke Nakamura
219d2ce3c0 Add qemu-user-static to dependencies
It is requied but not documented.
2021-05-08 23:52:18 +09:00
Takumi Sueda
d8c969cc7e
Merge pull request #18 from unasuke/readme_typo
Fix typo in README
2021-05-08 22:27:19 +09:00
Takumi Sueda
682b8a44b4
Merge pull request #17 from unasuke/loopdev
Use last loop device from `loopdev -l`
2021-05-06 09:14:17 +09:00
Yusuke Nakamura
9eee52eef1 Fix typo in README 2021-05-05 22:14:03 +09:00
Yusuke Nakamura
6fa865562d Use last loop device from loopdev -l
In my env, `make image/sd.img` failed by following error.

```
+ sudo kpartx -av /home/unasuke/src/github.com/brain-hackers/buildbrain/image/sd.img
add map loop6p1 (253:8): 0 131072 linear 7:6 2048
add map loop6p2 (253:9): 0 12154880 linear 7:6 133120
++ losetup -l
++ grep -o loop.
++ grep sd.img
+ LOOPDEV='loop6
loop4
loop5
loop3'
+ sudo mkfs.fat -F32 -v -I /dev/mapper/loop6 loop4 loop5 loop3p1
mkfs.fat 4.1 (2017-01-24)
Bad block count : loop4
Usage: mkfs.fat [-a][-A][-c][-C][-v][-I][-l bad-block-file][-b backup-boot-sector]
       [-m boot-msg-file][-n volume-name][-i volume-id]
       [-s sectors-per-cluster][-S logical-sector-size][-f number-of-FATs]
       [-h hidden-sectors][-F fat-size][-r root-dir-entries][-R reserved-sectors]
       [-M FAT-media-byte][-D drive_number]
       [--invariant]
       [--help]
       /dev/name [blocks]
make: *** [Makefile:126: image/sd.img] エラー 1
```
2021-05-05 22:05:49 +09:00
Takumi Sueda
0cb4e30ace Add linux packaging targets 2021-04-21 03:27:29 +09:00
Takumi Sueda
882ebd83a1
Merge pull request #16 from brain-hackers/ci-next
Next Brainux
2021-04-19 19:54:45 +09:00
Takumi Sueda
07177b6a8e Fix wrong owner and group 2021-04-19 01:38:28 +09:00
Takumi Sueda
5ff900db79 Set timezone to JST 2021-04-05 04:47:13 +09:00
Takumi Sueda
0f934753d6 Install and prepare fcitx 2021-04-05 04:41:41 +09:00
Takumi Sueda
b8908199d5 Install fake-hwclock 2021-04-05 03:20:10 +09:00
Takumi Sueda
0b2f80fe0b Update linux-brain 2021-04-05 03:06:08 +09:00
Takumi Sueda
c133c10be3 Fix case 2021-03-23 00:16:14 +09:00
Takumi Sueda
7c9634349f Update u-boot-brain 2021-03-22 23:38:59 +09:00
Takumi Sueda
48f1a6cb57 Add datetag target 2021-03-22 23:10:22 +09:00
Takumi Sueda
5e84e8719a
Merge pull request #15 from brain-hackers/ci-update
Next Brainux
2021-03-22 23:08:22 +09:00
Takumi Sueda
177e60d3ce Generate changelog 2021-03-22 22:55:05 +09:00
Takumi Sueda
039a0f2868 Override files / add calibration script for the first run 2021-03-22 22:55:05 +09:00
Takumi Sueda
2e0d446f9c Build & install ly / fix Xorg permission 2021-03-22 22:55:05 +09:00
Takumi Sueda
7b96c4dfb4 Add packages 2021-03-22 22:55:05 +09:00
Takumi Sueda
9fe585f2e1 Add user 2021-03-22 22:55:05 +09:00
Takumi Sueda
5a62bc1858 Fix unset env and wrong locale 2021-03-22 22:55:05 +09:00
Takumi Sueda
b5c7a41797 Enable SH7 build 2021-03-22 22:55:01 +09:00
Takumi Sueda
38bf49bd68 Generate listconfig 2021-03-22 22:41:50 +09:00
Takumi Sueda
88ee1a04fc Update misc 2021-03-22 22:41:50 +09:00
Takumi Sueda
08e8a5a316 Update linux-brain and u-boot-brain 2021-03-22 22:41:46 +09:00
Takumi Sueda
8930b5f3f3
Merge pull request #14 from unasuke/update_readme
Update "Bootstrap Debian 10 (buster)" section in README.md
2021-03-12 20:10:51 +09:00
Yusuke Nakamura
da73a4f413
Update README.md
Fix wording

Co-authored-by: Takumi Sueda <puhitaku@gmail.com>
2021-03-12 19:51:35 +09:00
Yusuke Nakamura
6120889990 Update "Bootstrap Debian 10 (buster)" section in README.md
Build phase commands refined from #10
2021-03-11 01:07:22 +09:00
Takumi Sueda
52cb032a89
Merge pull request #13 from unasuke/fix_getting_started
Add missing instruction step to make nkbin-maker
2021-03-09 22:11:49 +09:00
Takumi Sueda
884623144f
Merge pull request #12 from unasuke/update_readme
Update git repository url in README.md
2021-03-09 22:09:18 +09:00
Yusuke Nakamura
98505fbd1d Add nk.bin to .gitignore 2021-03-09 22:05:26 +09:00
Yusuke Nakamura
d455d582b8 Add missing instruction step to make nkbin-maker 2021-03-09 22:05:03 +09:00
Yusuke Nakamura
d25815ff52 Update git repository url in README.md
Use brain-hackers org
2021-03-09 21:38:03 +09:00
Takumi Sueda
3b26348a09 Add version script 2021-02-24 00:02:07 +09:00
Takumi Sueda
b1b57ed394
Merge pull request #11 from brain-hackers/update
Update
2021-02-24 00:01:36 +09:00
Takumi Sueda
76838eb82a Update linux-brain 2021-02-23 23:58:49 +09:00
Takumi Sueda
af6774678c Add a line to fix Midori error 2021-02-23 23:39:40 +09:00
Takumi Sueda
e6e2d04a92 Add packages 2021-02-23 23:37:39 +09:00
Takumi Sueda
1ebd86c1a2 Increase SD image size to 3GiB 2021-02-23 23:36:22 +09:00
Takumi Sueda
6a001a15df
Merge pull request #10 from brain-hackers/ci-image
Build Brainux on CI
2021-02-21 16:23:07 +09:00
Takumi Sueda
ab77561ec7 Update linux-brain 2021-02-21 16:18:44 +09:00
Takumi Sueda
fc61df79b6 Build Brainux on CI 2021-02-21 14:34:40 +09:00
Takumi Sueda
a0a58f83c6 Update linux-fslc 2021-02-19 20:56:38 +09:00
Takumi Sueda
834190745f
Merge pull request #9 from brain-hackers/tagname
Generate release name from triggered tag
2021-01-17 20:24:15 +09:00
Takumi Sueda
92e5c5f0ac Refer the triggered tag name 2021-01-17 20:23:15 +09:00
Takumi Sueda
3d659f4088 Update linux-brain 2021-01-17 19:34:57 +09:00
Takumi Sueda
7f3f198a79
Merge pull request #8 from brain-hackers/ci
Implement CI
2020-11-24 05:04:22 +09:00
34 changed files with 1602 additions and 126 deletions

289
.gitchangelog.rc Normal file
View File

@ -0,0 +1,289 @@
# -*- coding: utf-8; mode: python -*-
##
## Format
##
## ACTION: [AUDIENCE:] COMMIT_MSG [!TAG ...]
##
## Description
##
## ACTION is one of 'chg', 'fix', 'new'
##
## Is WHAT the change is about.
##
## 'chg' is for refactor, small improvement, cosmetic changes...
## 'fix' is for bug fixes
## 'new' is for new features, big improvement
##
## AUDIENCE is optional and one of 'dev', 'usr', 'pkg', 'test', 'doc'
##
## Is WHO is concerned by the change.
##
## 'dev' is for developpers (API changes, refactors...)
## 'usr' is for final users (UI changes)
## 'pkg' is for packagers (packaging changes)
## 'test' is for testers (test only related changes)
## 'doc' is for doc guys (doc only changes)
##
## COMMIT_MSG is ... well ... the commit message itself.
##
## TAGs are additionnal adjective as 'refactor' 'minor' 'cosmetic'
##
## They are preceded with a '!' or a '@' (prefer the former, as the
## latter is wrongly interpreted in github.) Commonly used tags are:
##
## 'refactor' is obviously for refactoring code only
## 'minor' is for a very meaningless change (a typo, adding a comment)
## 'cosmetic' is for cosmetic driven change (re-indentation, 80-col...)
## 'wip' is for partial functionality but complete subfunctionality.
##
## Example:
##
## new: usr: support of bazaar implemented
## chg: re-indentend some lines !cosmetic
## new: dev: updated code to be compatible with last version of killer lib.
## fix: pkg: updated year of licence coverage.
## new: test: added a bunch of test around user usability of feature X.
## fix: typo in spelling my name in comment. !minor
##
## Please note that multi-line commit message are supported, and only the
## first line will be considered as the "summary" of the commit message. So
## tags, and other rules only applies to the summary. The body of the commit
## message will be displayed in the changelog without reformatting.
##
## ``ignore_regexps`` is a line of regexps
##
## Any commit having its full commit message matching any regexp listed here
## will be ignored and won't be reported in the changelog.
##
ignore_regexps = [
r'@minor', r'!minor',
r'@cosmetic', r'!cosmetic',
r'@refactor', r'!refactor',
r'@wip', r'!wip',
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[p|P]kg:',
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[d|D]ev:',
r'^(.{3,3}\s*:)?\s*[fF]irst commit.?\s*$',
r'^$', ## ignore commits with empty messages
]
## ``section_regexps`` is a list of 2-tuples associating a string label and a
## list of regexp
##
## Commit messages will be classified in sections thanks to this. Section
## titles are the label, and a commit is classified under this section if any
## of the regexps associated is matching.
##
## Please note that ``section_regexps`` will only classify commits and won't
## make any changes to the contents. So you'll probably want to go check
## ``subject_process`` (or ``body_process``) to do some changes to the subject,
## whenever you are tweaking this variable.
##
section_regexps = [
('New', [
r'^[nN]ew\s*:\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
]),
('Changes', [
r'^[cC]hg\s*:\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
]),
('Fix', [
r'^[fF]ix\s*:\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
]),
('Other', None ## Match all lines
),
]
## ``body_process`` is a callable
##
## This callable will be given the original body and result will
## be used in the changelog.
##
## Available constructs are:
##
## - any python callable that take one txt argument and return txt argument.
##
## - ReSub(pattern, replacement): will apply regexp substitution.
##
## - Indent(chars=" "): will indent the text with the prefix
## Please remember that template engines gets also to modify the text and
## will usually indent themselves the text if needed.
##
## - Wrap(regexp=r"\n\n"): re-wrap text in separate paragraph to fill 80-Columns
##
## - noop: do nothing
##
## - ucfirst: ensure the first letter is uppercase.
## (usually used in the ``subject_process`` pipeline)
##
## - final_dot: ensure text finishes with a dot
## (usually used in the ``subject_process`` pipeline)
##
## - strip: remove any spaces before or after the content of the string
##
## - SetIfEmpty(msg="No commit message."): will set the text to
## whatever given ``msg`` if the current text is empty.
##
## Additionally, you can `pipe` the provided filters, for instance:
#body_process = Wrap(regexp=r'\n(?=\w+\s*:)') | Indent(chars=" ")
#body_process = Wrap(regexp=r'\n(?=\w+\s*:)')
#body_process = noop
body_process = ReSub(r'((^|\n)[A-Z]\w+(-\w+)*: .*(\n\s+.*)*)+$', r'') | strip
## ``subject_process`` is a callable
##
## This callable will be given the original subject and result will
## be used in the changelog.
##
## Available constructs are those listed in ``body_process`` doc.
subject_process = (strip |
ReSub(r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n@]*)(@[a-z]+\s+)*$', r'\4') |
SetIfEmpty("No commit message.") | ucfirst | final_dot)
## ``tag_filter_regexp`` is a regexp
##
## Tags that will be used for the changelog must match this regexp.
##
tag_filter_regexp = r'^[0-9-]+$'
## ``unreleased_version_label`` is a string or a callable that outputs a string
##
## This label will be used as the changelog Title of the last set of changes
## between last valid tag and HEAD if any.
unreleased_version_label = "(unreleased)"
## ``output_engine`` is a callable
##
## This will change the output format of the generated changelog file
##
## Available choices are:
##
## - rest_py
##
## Legacy pure python engine, outputs ReSTructured text.
## This is the default.
##
## - mustache(<template_name>)
##
## Template name could be any of the available templates in
## ``templates/mustache/*.tpl``.
## Requires python package ``pystache``.
## Examples:
## - mustache("markdown")
## - mustache("restructuredtext")
##
## - makotemplate(<template_name>)
##
## Template name could be any of the available templates in
## ``templates/mako/*.tpl``.
## Requires python package ``mako``.
## Examples:
## - makotemplate("restructuredtext")
##
output_engine = rest_py
#output_engine = mustache("restructuredtext")
#output_engine = mustache("markdown")
#output_engine = makotemplate("restructuredtext")
## ``include_merge`` is a boolean
##
## This option tells git-log whether to include merge commits in the log.
## The default is to include them.
include_merge = True
## ``log_encoding`` is a string identifier
##
## This option tells gitchangelog what encoding is outputed by ``git log``.
## The default is to be clever about it: it checks ``git config`` for
## ``i18n.logOutputEncoding``, and if not found will default to git's own
## default: ``utf-8``.
#log_encoding = 'utf-8'
## ``publish`` is a callable
##
## Sets what ``gitchangelog`` should do with the output generated by
## the output engine. ``publish`` is a callable taking one argument
## that is an interator on lines from the output engine.
##
## Some helper callable are provided:
##
## Available choices are:
##
## - stdout
##
## Outputs directly to standard output
## (This is the default)
##
## - FileInsertAtFirstRegexMatch(file, pattern, idx=lamda m: m.start())
##
## Creates a callable that will parse given file for the given
## regex pattern and will insert the output in the file.
## ``idx`` is a callable that receive the matching object and
## must return a integer index point where to insert the
## the output in the file. Default is to return the position of
## the start of the matched string.
##
## - FileRegexSubst(file, pattern, replace, flags)
##
## Apply a replace inplace in the given file. Your regex pattern must
## take care of everything and might be more complex. Check the README
## for a complete copy-pastable example.
##
# publish = FileInsertIntoFirstRegexMatch(
# "CHANGELOG.rst",
# r'/(?P<rev>[0-9]+\.[0-9]+(\.[0-9]+)?)\s+\([0-9]+-[0-9]{2}-[0-9]{2}\)\n--+\n/',
# idx=lambda m: m.start(1)
# )
#publish = stdout
## ``revs`` is a list of callable or a list of string
##
## callable will be called to resolve as strings and allow dynamical
## computation of these. The result will be used as revisions for
## gitchangelog (as if directly stated on the command line). This allows
## to filter exaclty which commits will be read by gitchangelog.
##
## To get a full documentation on the format of these strings, please
## refer to the ``git rev-list`` arguments. There are many examples.
##
## Using callables is especially useful, for instance, if you
## are using gitchangelog to generate incrementally your changelog.
##
## Some helpers are provided, you can use them::
##
## - FileFirstRegexMatch(file, pattern): will return a callable that will
## return the first string match for the given pattern in the given file.
## If you use named sub-patterns in your regex pattern, it'll output only
## the string matching the regex pattern named "rev".
##
## - Caret(rev): will return the rev prefixed by a "^", which is a
## way to remove the given revision and all its ancestor.
##
## Please note that if you provide a rev-list on the command line, it'll
## replace this value (which will then be ignored).
##
## If empty, then ``gitchangelog`` will act as it had to generate a full
## changelog.
##
## The default is to use all commits to make the changelog.
#revs = ["^1.0.3", ]
#revs = [
# Caret(
# FileFirstRegexMatch(
# "CHANGELOG.rst",
# r"(?P<rev>[0-9]+\.[0-9]+(\.[0-9]+)?)\s+\([0-9]+-[0-9]{2}-[0-9]{2}\)\n--+\n")),
# "HEAD"
#]
revs = []

View File

@ -12,47 +12,156 @@ jobs:
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: false
- name: Generate release name
id: release_name
run: echo "::set-output name=name::`date "+%Y-%m-%d-%H%M%S"`"
# https://github.community/t/how-to-get-just-the-tag-name/16241/4
run: echo ::set-output name=name::${GITHUB_REF/refs\/*s\//}
- name: Generate changes file
uses: sarnold/gitchangelog-action@master
with:
config_file: .gitchangelog.rc
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: Create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.release_name.outputs.name }}
tag_name: ${{ steps.release_name.outputs.name }}-tag
release_name: ${{ steps.release_name.outputs.name }}
body: |
Build ${{ steps.release_name.outputs.name }}
body_path: CHANGES.md
draft: false
prerelease: true
build:
build-linux:
runs-on: ubuntu-20.04
needs: [create_release]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Workaround for apt update failure
run: sudo rm -f /etc/apt/sources.list.d/github_git-lfs.*
- name: Install deps
run: sudo apt update && sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi qemu-user-static debootstrap python3-pip
- name: Upgrade pip and setuptools
run: pip3 install -U pip setuptools
- name: Install listconfig
run: pip3 install listconfig
- name: Configure for Linux
run: make ldefconfig
- name: Build Linux
run: make lbuild
- name: Setup releases
id: release_name
run: |
mkdir release
cp ./linux-brain/arch/arm/boot/dts/imx28-pwsh*.dtb release/
cp ./linux-brain/arch/arm/boot/zImage release/zImage
zip -r release.zip release/
- name: Generate archive name
id: archive_name
run: echo ::set-output name=name::linux-${GITHUB_REF/refs\/*s\//}
- name: Upload release.zip
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: release.zip
asset_name: ${{ steps.archive_name.outputs.name }}.zip
asset_content_type: application/zip
- name: Generate listconfig
run: listconfig ./linux-brain/Kconfig ./linux-brain/.config > listconfig
- name: Upload listconfig
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: listconfig
asset_name: listconfig
asset_content_type: text/plain
build-linux-x1:
runs-on: ubuntu-20.04
needs: [create_release]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Workaround for apt update failure
run: sudo rm -f /etc/apt/sources.list.d/github_git-lfs.*
- name: Install deps
run: sudo apt update && sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabihf libssl-dev lzop qemu-user-static debootstrap
- name: Configure for Linux
run: make ldefconfig-x1
- name: Build Linux
run: make lbuild
- name: Setup releases
id: release_name
run: |
mkdir release
cp ./linux-brain/arch/arm/boot/dts/imx7ulp-pwh*.dtb release/
cp ./linux-brain/arch/arm/boot/zImage release/zImage
zip -r release.zip release/
- name: Generate archive name
id: archive_name
run: echo ::set-output name=name::linux-x1-${GITHUB_REF/refs\/*s\//}
- name: Upload release.zip
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: release.zip
asset_name: ${{ steps.archive_name.outputs.name }}.zip
asset_content_type: application/zip
build-uboot:
runs-on: ubuntu-20.04
needs: [create_release]
strategy:
matrix:
include:
- model: a7200
nk: edna3exe.bin
lilo: gen2.bin
- model: a7400
nk: edna3exe.bin
lilo: gen2_7400.bin
- model: sh1
nk: edsa1exe.bin
lilo: gen3_1.bin
- model: sh2
nk: edsa2exe.bin
lilo: gen3_2.bin
- model: sh3
nk: edsa3exe.bin
lilo: gen3_3.bin
- model: sh4
nk: edsh4exe.bin
lilo: gen3_4.bin
- model: sh5
nk: edsh5exe.bin
lilo: gen3_5.bin
- model: sh6
nk: edsh6exe.bin
lilo: gen3_6.bin
- model: sh7
nk: edsh7exe.bin
lilo: gen3_7.bin
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
submodules: true
- name: Workaround for apt update failure
run: sudo rm /etc/apt/sources.list.d/github_git-lfs.*
run: sudo rm -f /etc/apt/sources.list.d/github_git-lfs.*
- name: Install deps
run: sudo apt update && sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi qemu-user-static debootstrap
- name: Build nkbin-maker
@ -63,28 +172,18 @@ jobs:
run: make ubuild
- name: Generate NK.bin
run: make nk.bin
- name: Configure for Linux
run: make ldefconfig
- name: Build Linux
run: make lbuild
# - name: Build Debian Root # Wait for buildroot
# run: |
# ./tools/aptcache_linux_amd64 \
# -rule 'local=localhost:65432, remote=ftp.us.debian.org' \
# -rule 'local=localhost:65433, remote=security.debian.org' &
# make debian
- name: Setup releases
id: release_name
run: |
mkdir release
cp ./u-boot-brain/u-boot.bin release/u-boot.bin
cp ./u-boot-brain/u-boot.bin release/${{ matrix.lilo }}
cp ./u-boot-brain/u-boot.sb release/u-boot.sb
cp ./nk.bin release/${{ matrix.nk }}
cp ./linux-brain/arch/arm/boot/dts/imx28-pw${{ matrix.model }}.dtb release/imx28-pw${{ matrix.model }}.dtb
cp ./linux-brain/arch/arm/boot/zImage release/zImage
zip -r release.zip release/
- name: Generate archive name
id: archive_name
run: echo ::set-output name=name::uboot-${{ matrix.model }}-${GITHUB_REF/refs\/*s\//}
- name: Upload release.zip
uses: actions/upload-release-asset@v1
env:
@ -92,5 +191,131 @@ jobs:
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: release.zip
asset_name: ${{ matrix.model }}-boot.zip
asset_name: ${{ steps.archive_name.outputs.name }}.zip
asset_content_type: application/zip
build-uboot-x1:
runs-on: ubuntu-20.04
needs: [create_release]
strategy:
matrix:
include:
- model: h1
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Workaround for apt update failure
run: sudo rm -f /etc/apt/sources.list.d/github_git-lfs.*
- name: Install deps
run: sudo apt update && sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabihf libssl-dev lzop qemu-user-static debootstrap
- name: Configure for U-Boot
run: make udefconfig-${{ matrix.model }}
- name: Build U-Boot
run: make ubuild
- name: Setup releases
id: release_name
run: |
mkdir release
cp ./u-boot-brain/u-boot.bin release/u-boot.bin
zip -r release.zip release/
- name: Generate archive name
id: archive_name
run: echo ::set-output name=name::uboot-${{ matrix.model }}-${GITHUB_REF/refs\/*s\//}
- name: Upload release.zip
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: release.zip
asset_name: ${{ steps.archive_name.outputs.name }}.zip
asset_content_type: application/zip
build-sd:
runs-on: ubuntu-20.04
needs: [create_release]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Make /opt writable
run: sudo chown "$(whoami):$(whoami)" /opt
- name: Install cegcc
run: |
wget -O cegcc.zip https://github.com/brain-hackers/cegcc-build/releases/download/2022-04-11-133546/cegcc-2022-04-11-133546.zip
unzip -q cegcc.zip
cp -r cegcc /opt/
- name: Workaround for apt update failure
run: sudo rm -f /etc/apt/sources.list.d/github_git-lfs.*
- name: Install deps
run: sudo apt update && sudo apt install kpartx build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi qemu-user-static debootstrap
- name: Configure for Linux
run: make ldefconfig
- name: Build Linux
run: make lbuild
- name: Build Debian Root
run: make brainux
- name: Build bsd-ce
run: make -C nkbin_maker bsd-ce
- name: Generate image name
id: image_name
run: echo ::set-output name=name::sdimage-${GITHUB_REF/refs\/*s\//}
- name: Build SD image
run: make image/sd.img && mv image/sd.img ${{ steps.image_name.outputs.name }}.img
- name: Compress
run: zip ${{ steps.image_name.outputs.name }}.zip ${{ steps.image_name.outputs.name }}.img
- name: Upload the image
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: ${{ steps.image_name.outputs.name }}.zip
asset_name: ${{ steps.image_name.outputs.name }}.zip
asset_content_type: application/zip
build-sd-x1:
runs-on: ubuntu-20.04
needs: [create_release]
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Workaround for apt update failure
run: sudo rm -f /etc/apt/sources.list.d/github_git-lfs.*
- name: Install deps
run: sudo apt update && sudo apt install kpartx build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabihf libssl-dev lzop qemu-user-static debootstrap
- name: Upgrade pip and setuptools
run: pip3 install -U pip setuptools
- name: Install pyelftools
run: pip3 install pyelftools
- name: Build Boot4u
run: make boot4ubuild
- name: Configure for U-Boot
run: make udefconfig-h1
- name: Build U-Boot
run: make ubuild
- name: Configure for Linux
run: make ldefconfig-x1
- name: Build Linux
run: make lbuild
- name: Build Debian Root
run: make brainux
- name: Generate image name
id: image_name
run: echo ::set-output name=name::sdimage-x1-${GITHUB_REF/refs\/*s\//}
- name: Build SD image
run: make image/sd_x1.img && mv image/sd_x1.img ${{ steps.image_name.outputs.name }}.img
- name: Compress
run: zip ${{ steps.image_name.outputs.name }}.zip ${{ steps.image_name.outputs.name }}.img
- name: Upload the image
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_release.outputs.upload_url }}
asset_path: ${{ steps.image_name.outputs.name }}.zip
asset_name: ${{ steps.image_name.outputs.name }}.zip
asset_content_type: application/zip

5
.gitignore vendored
View File

@ -1,4 +1,7 @@
env
debian
brainux
cache/*
!cache/.gitkeep
nk.bin
image/sd.img
image/work

11
.gitmodules vendored
View File

@ -3,7 +3,16 @@
url = https://github.com/brain-hackers/u-boot-brain.git
[submodule "linux-brain"]
path = linux-brain
url = https://github.com/brain-hackers/linux-brain
url = https://github.com/brain-hackers/linux-brain.git
[submodule "nkbin_maker"]
path = nkbin_maker
url = https://github.com/brain-hackers/nkbin_maker.git
[submodule "boot4u"]
path = boot4u
url = https://github.com/brain-hackers/boot4u.git
[submodule "brainlilo"]
path = brainlilo
url = https://github.com/brain-hackers/brainlilo.git
[submodule "buildroot"]
path = buildroot
url = https://github.com/brain-hackers/buildroot.git

113
Makefile
View File

@ -1,7 +1,9 @@
JOBS=$(shell grep -c '^processor' /proc/cpuinfo)
UBOOT_CROSS=$(shell ./tools/getcross u-boot)
LINUX_CROSS=$(shell ./tools/getcross linux)
ROOTFS_CROSS=$(shell ./tools/getcross rootfs)
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
.PHONY:
setup:
@ -33,11 +35,11 @@ udefconfig-%:
.PHONY:
usavedefconfig:
make -C ./u-boot-brain savedefconfig
make CROSS_COMPILE=$(UBOOT_CROSS) -C ./u-boot-brain savedefconfig
.PHONY:
umenuconfig:
make -C ./u-boot-brain menuconfig
make CROSS_COMPILE=$(UBOOT_CROSS) -C ./u-boot-brain menuconfig
.PHONY:
uclean:
@ -45,28 +47,65 @@ uclean:
.PHONY:
ubuild:
make -j$(JOBS) -C ./u-boot-brain u-boot.sb
if [ "$(UBOOT_CROSS)" = "arm-linux-gnueabi-" ]; then \
make CROSS_COMPILE=$(UBOOT_CROSS) -j$(JOBS) -C ./u-boot-brain u-boot.sb; \
else \
make CROSS_COMPILE=$(UBOOT_CROSS) -j$(JOBS) -C ./u-boot-brain u-boot.imx; \
fi
.PHONY:
ldefconfig:
make -C ./linux-brain brain_defconfig
.PHONY:
ldefconfig-x1:
make -C ./linux-brain imx_v7_defconfig
.PHONY:
lmenuconfig:
make -C ./linux-brain menuconfig
make CROSS_COMPILE=$(LINUX_CROSS) -C ./linux-brain menuconfig
.PHONY:
lsavedefconfig:
make -C ./linux-brain savedefconfig
make CROSS_COMPILE=$(LINUX_CROSS) -C ./linux-brain savedefconfig
mv ./linux-brain/defconfig ./linux-brain/arch/arm/configs/brain_defconfig
.PHONY:
lsavedefconfig-x1:
make CROSS_COMPILE=$(LINUX_CROSS) -C ./linux-brain savedefconfig
mv ./linux-brain/defconfig ./linux-brain/arch/arm/configs/imx_v7_defconfig
.PHONY:
lclean:
make -C ./linux-brain distclean
.PHONY:
lbuild:
make -j$(JOBS) -C ./linux-brain
make CROSS_COMPILE=$(LINUX_CROSS) -j$(JOBS) -C ./linux-brain
.PHONY:
ldebpkg:
$(MAKE) ldebpkg-build || $(MAKE) ldebpkg-clean
mkdir -p debian
mv linux-*.buildinfo debian/
mv linux-*.changes debian/
mv linux-*.diff.gz debian/
mv linux-*.dsc debian/
mv linux-*.orig.tar.gz debian/
mv linux-*.deb debian/
.PHONY:
ldebpkg-build:
make -j$(JOBS) -C ./linux-brain deb-pkg
.PHONY:
ldebpkg-clean:
rm -f linux-*.buildinfo
rm -f linux-*.changes
rm -f linux-*.diff.gz
rm -f linux-*.dsc
rm -f linux-*.orig.tar.gz
rm -f linux-*.deb
.PHONY:
uuu:
@ -80,19 +119,67 @@ nkbin-maker:
nk.bin:
./nkbin_maker/bsd-ce ./u-boot-brain/u-boot.bin
debian:
.PHONY:
boot4ubuild:
make -C ./boot4u
.PHONY:
boot4uclean:
make -C ./boot4u clean
.PHONY:
lilobuild:
make -C ./brainlilo
.PHONY:
liloclean:
make -C ./brainlilo clean
brainux:
@if [ "$(shell uname)" != "Linux" ]; then \
echo "Debootstrap is only available in Linux!"; \
exit 1; \
fi
mkdir -p debian
sudo debootstrap --arch=armel --foreign buster debian/ http://localhost:65432/debian/
sudo cp /usr/bin/qemu-arm-static debian/usr/bin/
sudo cp ./tools/setup_debian.sh debian/
sudo chroot debian /setup_debian.sh
sudo mkdir -p brainux
@if [ "$(CI)" = "true" ]; then \
echo "I'm in CI and debootstrap without cache."; \
sudo debootstrap --arch=$(ROOTFS_CROSS) --foreign bullseye brainux/; \
else \
sudo debootstrap --arch=$(ROOTFS_CROSS) --foreign bullseye brainux/ http://localhost:65432/debian/; \
fi
sudo cp /usr/bin/qemu-arm-static brainux/usr/bin/
sudo cp ./os-brainux/setup_brainux.sh brainux/
sudo ./os-brainux/override-pre.sh ./os-brainux/override ./brainux
sudo -E chroot brainux /setup_brainux.sh
sudo rm brainux/setup_brainux.sh
sudo ./os-brainux/override.sh ./os-brainux/override ./brainux
buildroot_rootfs:
make -C buildroot brain_imx28_defconfig
make -C buildroot -j 12
sudo mkdir -p buildroot_rootfs
sudo tar -C ./buildroot_rootfs -xf buildroot/output/images/rootfs.tar
image/sd.img: clean_work
./image/build_image.sh brainux sd.img 3072
image/sd_x1.img: clean_work
./image/build_image_x1.sh brainux sd_x1.img 3072
image/sd_buildroot.img: clean_work
./image/build_image.sh buildroot_rootfs sd_buildroot.img 128
.PHONY:
clean_work:
sudo rm -rf image/work
.PHONY:
aptcache:
./tools/aptcache_linux_amd64 \
-rule 'local=localhost:65432, remote=ftp.jaist.ac.jp' \
-rule 'local=localhost:65433, remote=security.debian.org'
.PHONY:
datetag:
git tag $(shell ./tools/version)

View File

@ -3,7 +3,7 @@ buildbrain
This repository includes:
- linux-brain, u-boot-brain and nkbin_maker as submodules
- linux-brain, u-boot-brain, nkbin_maker and boot4u as submodules
- Useful build targets in Makefile
- r3build.toml to watch changes that occur in submodules
@ -12,6 +12,7 @@ Confirmed environments
----------------------
- Debian 10 (buster) amd64
- Debian 11 (bullseye) amd64
Getting Started
@ -20,13 +21,13 @@ Getting Started
1. Install dependencies.
```
$ sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi
$ sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf libssl-dev bc lzop qemu-user-static debootstrap kpartx libyaml-dev python3-pyelftools
```
1. Clone this repository with recursive clone enabled.
```
$ git clone --recursive git@github.com:puhitaku/buildbrain.git
$ git clone --recursive git@github.com:brain-hackers/buildbrain.git
```
- If you've cloned it without `--recursive`, run following command:
@ -41,32 +42,47 @@ Getting Started
- Put `uuu` where the PATH executable points to.
Build and inject U-Boot
Build U-Boot
-----------------------
1. Run `make udefconfig-sh*` to generate `.config`.
- For Sx1: `make udefconfig-sh1`
- For Sx6: `make udefconfig-sh6`
- For x1: `make udefconfig-h1`
2. Run `make ubuild` to build whole repository and generate `u-boot.sb`.
2. Run `make ubuild` to build whole repository and generate `u-boot.sb` or `u-boot.bin`.
- i.MX283 loads a packed U-Boot executable called `u-boot.sb`.
3. To inject the executable into i.MX283 in recovery mode, run `make uuu`.
Inject U-Boot into i.MX283 in recovery mode
-----------------------
1. Follow `Build U-Boot` procedure to make U-Boot binary.
1. Run `make uuu`
Build and make NK.bin
-----------------------
1. Run `make udefconfig` to generate `.config`.
1. Follow `Build U-Boot` procedure to make U-Boot binary.
2. Run `make ubuild` to build whole repository and generate `u-boot.bin`.
1. Run `make nkbin-maker`.
3. To make `nk.bin`, run `make nkbin`.
1. To make `nk.bin`, run `make nk.bin`.
- nkbin_maker packs `u-boot.bin` into `nk.bin`.
Build and deploy boot4u
-----------------------
1. Run `make boot4u`
1. Create index.din and copy AppMain.bin
- `mkdir /path/to/your/sd/1st/partition/App/boot4u`
- `touch /path/to/your/sd/1st/partition/App/boot4u/index.din`
- `cp boot4u/AppMain.bin /path/to/your/sd/1st/partition/App/boot4u/`
Build Linux
-----------
@ -78,29 +94,38 @@ Build Linux
1. Confirm that `linux-brain/arch/arm/boot/zImage` exists.
Bootstrap Debian 10 (buster)
----------------------------
Build a Debian rootfs
---------------------
1. Partition an SD card into two partitions.
- 1st: FAT32 (vfat), about 100MB
- 2st: ext4, fill the remaining area
1. Build and copy the Linux kernel.
- Run `make ldefconfig lbuild`.
- Copy `/linux-brain/arch/arm/boot/zImage` and `/linux-brain/arch/arm/boot/dts/imx28-evk.dtb` into the 1st partition.
1. Run `make ldefconfig lbuild`.
1. Run APT cache in background (mandatory): `make aptcache`.
1. Run `make debian`.
1. Run `make brainux`.
1. Copy all contents in `./debian` into the 2nd partition.
1. Run `make image/sd.img`
- `sudo cp -ar ./debian/* /path/to/your/sd/2nd/partition/`
- Please make sure that all attributes are preserved with `-a` flag.
1. Confirm that `image/sd.img` is built and burn it to an SD card.
Build a Buildroot rootfs
------------------------
Buildroot rootfs aims to be the most lightweight rootfs for experimental use. `make buildroot_rootfs` runs the defconfig target for rootfs-only build and then builds the rootfs tarball and a CPIO archive for initramfs. `make image/sd_buildroot.img` makes a bootable SD image in `image` directory like the typical Brainux SD image.
If you want to customize the build of Buildroot, `cd` into `buildroot` and use the following targets:
- `make menuconfig` to change the configuration
- `make` to build the rootfs (`-j` option might give you extra speed)
`image/sd_buildroot.img` target expects presence of the tarball at `buildroot/output/images/rootfs.tar`. You'll have to `clean` and rebuild every time you change the Buildroot's config before making the SD image.
Known issues
----------------------------------------
If you use GCC 10 for the host compiler, `make ubuild` may fail.
To complete build, open `/u-boot-brain/scripts/dtc/dtc-lexer.lex.c` or `/u-boot-brain/scripts/dtc/dtc-parser.tab.c` then comment out `YYLTYPE yylloc;`
Watch changes in submodules & auto-build
----------------------------------------
@ -116,4 +141,3 @@ What's r3build?
---------------
[r3build](https://github.com/puhitaku/r3build) is a smart file watcher that aims to provide hot-reloading feature like Web frontend development.

1
boot4u Submodule

@ -0,0 +1 @@
Subproject commit 3f916a0cf7b2516e3eaa720a5c77efbe53527eeb

1
brainlilo Submodule

@ -0,0 +1 @@
Subproject commit 2ec8f7827e40ec8dfe6b7f5b0200e1effaf1b855

1
buildroot Submodule

@ -0,0 +1 @@
Subproject commit cf3ea901082f470449bd174272d8407e039522b2

23
image/LICENSE Normal file
View File

@ -0,0 +1,23 @@
*** exeopener ***
MIT License
Copyright (c) 2022 Chiharu Shirasaka
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

91
image/build_image.sh Executable file
View File

@ -0,0 +1,91 @@
#!/bin/bash
set -uex -o pipefail
JOBS=$(nproc)
REPO=$(git rev-parse --show-toplevel)
WORK=${REPO}/image/work
LINUX=${REPO}/linux-brain
ROOTFS=$1
IMG_NAME=$2
IMG=${REPO}/image/${IMG_NAME}
SIZE_M=$3
export CROSS_COMPILE=arm-linux-gnueabi-
mkdir -p ${WORK}
mkdir -p ${WORK}/lilobin
for i in "a7200" "a7400" "sh1" "sh2" "sh3" "sh4" "sh5" "sh6" "sh7"; do
NUM=$(echo $i | sed -E 's/sh//g')
make -C ${REPO}/u-boot-brain distclean pw${i}_defconfig
make -j${JOBS} -C ${REPO}/u-boot-brain u-boot.bin
${REPO}/nkbin_maker/bsd-ce ${REPO}/u-boot-brain/u-boot.bin
case $i in
"a7200")
mv ${REPO}/nk.bin ${WORK}/edna3exe.bin
mv ${REPO}/u-boot-brain/u-boot.bin ${WORK}/lilobin/gen2.bin;;
"a7400")
mv ${REPO}/u-boot-brain/u-boot.bin ${WORK}/lilobin/gen2_7400.bin;;
"sh1" | "sh2" | "sh3")
mv ${REPO}/nk.bin ${WORK}/edsa${NUM}exe.bin
mv ${REPO}/u-boot-brain/u-boot.bin ${WORK}/lilobin/gen3_${NUM}.bin;;
"sh4" | "sh5" | "sh6" | "sh7")
mv ${REPO}/nk.bin ${WORK}/edsh${NUM}exe.bin
mv ${REPO}/u-boot-brain/u-boot.bin ${WORK}/lilobin/gen3_${NUM}.bin;;
*)
echo "WTF: $i"
exit 1;;
esac
done
dd if=/dev/zero of=${IMG} bs=1M count=${SIZE_M}
START1=2048
SECTORS1=$((1024 * 1024 * 64 / 512))
START2=$((2048 + ${SECTORS1}))
cat <<EOF > ${WORK}/part.sfdisk
${IMG}1 : start=${START1}, size=${SECTORS1}, type=b
${IMG}2 : start=${START2}, type=83
EOF
sfdisk ${IMG} < ${WORK}/part.sfdisk
sudo kpartx -av ${IMG}
LOOPDEV=$(losetup -l | grep ${IMG_NAME} | grep -o 'loop.' | tail -n 1)
sudo mkfs.fat -n boot -F32 -v -I /dev/mapper/${LOOPDEV}p1
sudo mkfs.ext4 -L rootfs /dev/mapper/${LOOPDEV}p2
mkdir -p ${WORK}/p1 ${WORK}/p2
sudo mount -o utf8=true /dev/mapper/${LOOPDEV}p1 ${WORK}/p1
sudo mount /dev/mapper/${LOOPDEV}p2 ${WORK}/p2
sudo cp ${LINUX}/arch/arm/boot/zImage ${WORK}/p1/
sudo cp ${LINUX}/arch/arm/boot/dts/imx28-pw*.dtb ${WORK}/p1/
sudo mkdir -p ${WORK}/p1/nk
sudo cp ${WORK}/*.bin ${WORK}/p1/nk/
make -C ${REPO}/brainlilo
LILO="${WORK}/p1/アプリ/Launch Linux"
sudo mkdir -p "${LILO}"
sudo touch "${LILO}/index.din"
sudo touch "${LILO}/AppMain.cfg"
sudo cp ${REPO}/brainlilo/*.dll "${LILO}/"
sudo cp ${REPO}/brainlilo/BrainLILO.exe "${LILO}/AppMain_.exe"
gzip -cd ${REPO}/image/exeopener.exe.gz > ${REPO}/image/exeopener.exe
sudo cp ${REPO}/image/exeopener.exe "${LILO}/AppMain.exe"
sudo mkdir -p ${WORK}/p1/loader
sudo cp ${WORK}/lilobin/*.bin ${WORK}/p1/loader/
sudo cp -ra ${REPO}/${ROOTFS}/* ${WORK}/p2/
sudo umount ${WORK}/p1 ${WORK}/p2
sudo kpartx -d ${IMG}
rmdir ${WORK}/p1 ${WORK}/p2

52
image/build_image_x1.sh Executable file
View File

@ -0,0 +1,52 @@
#!/bin/bash
set -uex -o pipefail
JOBS=$(nproc)
REPO=$(git rev-parse --show-toplevel)
WORK=${REPO}/image/work
LINUX=${REPO}/linux-brain
IMG=${REPO}/image/sd_x1.img
export CROSS_COMPILE=arm-linux-gnueabihf-
mkdir -p ${WORK}
dd if=/dev/zero of=${IMG} bs=1M count=3072
START1=2048
SECTORS1=$((1024 * 1024 * 64 / 512))
START2=$((2048 + ${SECTORS1}))
cat <<EOF > ${WORK}/part.sfdisk
${IMG}1 : start=${START1}, size=${SECTORS1}, type=b
${IMG}2 : start=${START2}, type=83
EOF
sfdisk ${IMG} < ${WORK}/part.sfdisk
sudo kpartx -av ${IMG}
LOOPDEV=$(losetup -l | grep sd_x1.img | grep -o 'loop.')
sudo mkfs.fat -F32 -v -I /dev/mapper/${LOOPDEV}p1
sudo mkfs.ext4 /dev/mapper/${LOOPDEV}p2
mkdir -p ${WORK}/p1 ${WORK}/p2
sudo mount /dev/mapper/${LOOPDEV}p1 ${WORK}/p1
sudo mount /dev/mapper/${LOOPDEV}p2 ${WORK}/p2
sudo cp ${LINUX}/arch/arm/boot/zImage ${WORK}/p1/
sudo cp ${LINUX}/arch/arm/boot/dts/imx7ulp-pwh*.dtb ${WORK}/p1/
sudo cp ${REPO}/u-boot-brain/u-boot.bin ${WORK}/p1/
sudo mkdir -p ${WORK}/p1/App/boot4u
sudo cp ${REPO}/boot4u/AppMain.bin ${WORK}/p1/App/boot4u/
sudo touch ${WORK}/p1/App/boot4u/index.din
sudo cp -ra ${REPO}/brainux/* ${WORK}/p2/
sudo umount ${WORK}/p1 ${WORK}/p2
sudo kpartx -d ${IMG}
rmdir ${WORK}/p1 ${WORK}/p2

BIN
image/exeopener.exe.gz Normal file

Binary file not shown.

@ -1 +1 @@
Subproject commit cac9c9d086a73fc89bf5e6edf4d7838c55293755
Subproject commit afbb7e017623f0963270cbad512f1d83b83a3d5b

10
os-brainux/override-pre.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
set -uex -o pipefail
SRC=$1
DST=$2
install -g root -o root -m 0644 $SRC/lib/systemd/system/boot.mount $DST/lib/systemd/system/boot.mount
install -g root -o root -m 0644 $SRC/lib/systemd/system/rndis_gadget.service $DST/lib/systemd/system/rndis_gadget.service
install -g root -o root -m 0755 $SRC/usr/bin/enable_rndis_gadget $DST/usr/bin/enable_rndis_gadget

21
os-brainux/override.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/bash
set -uex -o pipefail
SRC=$1
DST=$2
install -g root -o root -m 0644 $SRC/etc/motd $DST/etc/motd
install -g root -o root -m 0440 $SRC/etc/sudoers $DST/etc/sudoers
install -g root -o root -m 0644 $SRC/etc/X11/xorg.conf $DST/etc/X11/xorg.conf
install -g root -o root -m 0644 $SRC/etc/X11/Xsession.d/96calibrate $DST/etc/X11/Xsession.d/96calibrate
install -g root -o root -m 0644 -D $SRC/etc/xdg/weston/weston.ini $DST/etc/xdg/weston/weston.ini
install -g 1000 -o 1000 -m 0644 $SRC/home/user/.xprofile $DST/home/user/.xprofile
sudo -u#1000 -g#1000 mkdir -p $DST/home/user/.config/fcitx
install -g 1000 -o 1000 -m 0644 $SRC/home/user/.config/fcitx/profile $DST/home/user/.config/fcitx/profile
sudo -u#1000 -g#1000 mkdir -p $DST/home/user/lxterminal
install -g 1000 -o 1000 -m 0644 $SRC/home/user/lxterminal/lxterminal.conf $DST/home/user/lxterminal/lxterminal.conf
install -g root -o root -m 0644 -D $SRC/etc/jwm/system.jwmrc $DST/etc/jwm/system.jwmrc

View File

@ -0,0 +1,4 @@
if [ ! -e /etc/X11/xorg.conf.d/99-calibrator.conf ]; then
xinput_calibrator --output-filename /etc/X11/xorg.conf.d/99-calibrator.conf
fi

View File

@ -0,0 +1,8 @@
Section "Device"
Identifier "device"
Driver "fbdev"
EndSection
Section "Screen"
Identifier "screen"
Device "device"
EndSection

View File

@ -0,0 +1,216 @@
<?xml version="1.0"?>
<JWM>
<!-- The root menu. -->
<RootMenu onroot="12">
<Include>/etc/jwm/debian-menu</Include>
<Program icon="terminal.png" label="Terminal">lxterminal</Program>
<Separator/>
<Program icon="lock.png" label="Lock">
xlock -mode blank
</Program>
<Separator/>
<Restart label="Restart" icon="restart.png"/>
<Exit label="Exit" confirm="true" icon="quit.png"/>
</RootMenu>
<!-- Options for program groups. -->
<Group>
<Option>tiled</Option>
<Option>aerosnap</Option>
</Group>
<Group>
<Class>Pidgin</Class>
<Option>sticky</Option>
</Group>
<Group>
<Name>xterm</Name>
<Option>vmax</Option>
</Group>
<Group>
<Name>xclock</Name>
<Option>drag</Option>
<Option>notitle</Option>
</Group>
<!-- Tray at the bottom. -->
<Tray x="0" y="-1" height="20" autohide="off">
<TrayButton icon="/usr/share/jwm/jwm-red.svg">root:1</TrayButton>
<Spacer width="2"/>
<Pager labeled="true"/>
<TaskList maxwidth="192"/>
<Dock/>
<Clock format="%H:%M"><Button mask="123">exec:xclock</Button></Clock>
</Tray>
<!-- Visual Styles -->
<WindowStyle>
<Font>Sans-9:bold</Font>
<Width>4</Width>
<Height>21</Height>
<Corner>3</Corner>
<Foreground>#FFFFFF</Foreground>
<Background>#555555</Background>
<Outline>#777777</Outline>
<Opacity>0.5</Opacity>
<Active>
<Foreground>#FFFFFF</Foreground>
<Background>#0077CC</Background>
<Outline>#1AA0FF</Outline>
<Opacity>1.0</Opacity>
</Active>
</WindowStyle>
<TrayStyle group="true" list="all">
<Font>Sans-9</Font>
<Background>#222222</Background>
<Foreground>#FFFFFF</Foreground>
<Outline>#222222</Outline>
<Opacity>0.75</Opacity>
</TrayStyle>
<TaskListStyle>
<Font>Sans-9</Font>
<Active>
<Foreground>#FFFFFF</Foreground>
<Background>#333333</Background>
</Active>
<Foreground>#FFFFFF</Foreground>
<Background>#222222</Background>
</TaskListStyle>
<PagerStyle>
<Outline>#3B3B3B</Outline>
<Foreground>#555555</Foreground>
<Background>#333333</Background>
<Text>#FFFFFF</Text>
<Active>
<Foreground>#0077CC</Foreground>
<Background>#004488</Background>
</Active>
</PagerStyle>
<MenuStyle>
<Font>Sans-9</Font>
<Foreground>#FFFFFF</Foreground>
<Background>#333333</Background>
<Outline>#000000</Outline>
<Active>
<Foreground>#FFFFFF</Foreground>
<Background>#0077CC</Background>
</Active>
<Opacity>0.85</Opacity>
</MenuStyle>
<PopupStyle>
<Font>Sans-9</Font>
<Foreground>#000000</Foreground>
<Background>#999999</Background>
</PopupStyle>
<!-- Path where icons can be found.
IconPath can be listed multiple times to allow searching
for icons in multiple paths.
-->
<IconPath>/usr/share/icons/gnome/256x256/actions</IconPath>
<IconPath>/usr/share/icons/gnome/256x256/apps</IconPath>
<IconPath>/usr/share/icons/gnome/256x256/categories</IconPath>
<IconPath>/usr/share/icons/gnome/256x256/devices</IconPath>
<IconPath>/usr/share/icons/gnome/256x256/emblems</IconPath>
<IconPath>/usr/share/icons/gnome/256x256/mimetypes</IconPath>
<IconPath>/usr/share/icons/gnome/256x256/places</IconPath>
<IconPath>/usr/share/icons/gnome/256x256/status</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/actions</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/animations</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/apps</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/categories</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/devices</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/emblems</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/mimetypes</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/places</IconPath>
<IconPath>/usr/share/icons/gnome/32x32/status</IconPath>
<IconPath>/usr/share/icons/gnome/scalable/actions</IconPath>
<IconPath>/usr/share/icons/gnome/scalable/apps</IconPath>
<IconPath>/usr/share/icons/gnome/scalable/categories</IconPath>
<IconPath>/usr/share/icons/gnome/scalable/devices</IconPath>
<IconPath>/usr/share/icons/gnome/scalable/emblems</IconPath>
<IconPath>/usr/share/icons/gnome/scalable/mimetypes</IconPath>
<IconPath>/usr/share/icons/gnome/scalable/places</IconPath>
<IconPath>/usr/share/icons/gnome/scalable/status</IconPath>
<IconPath>/usr/share/icons/hicolor/256x256/apps</IconPath>
<IconPath>/usr/share/icons/hicolor/256x256/mimetypes</IconPath>
<IconPath>/usr/share/icons/hicolor/32x32/actions</IconPath>
<IconPath>/usr/share/icons/hicolor/32x32/apps</IconPath>
<IconPath>/usr/share/icons/hicolor/32x32/categories</IconPath>
<IconPath>/usr/share/icons/hicolor/32x32/devices</IconPath>
<IconPath>/usr/share/icons/hicolor/32x32/emblems</IconPath>
<IconPath>/usr/share/icons/hicolor/32x32/mimetypes</IconPath>
<IconPath>/usr/share/icons/hicolor/32x32/status</IconPath>
<IconPath>/usr/share/icons/hicolor/512x512/apps</IconPath>
<IconPath>/usr/share/icons/hicolor/512x512/mimetypes</IconPath>
<IconPath>/usr/share/icons/hicolor/scalable/actions</IconPath>
<IconPath>/usr/share/icons/hicolor/scalable/apps</IconPath>
<IconPath>/usr/share/icons/hicolor/scalable/categories</IconPath>
<IconPath>/usr/share/icons/hicolor/scalable/devices</IconPath>
<IconPath>/usr/share/icons/hicolor/scalable/emblems</IconPath>
<IconPath>/usr/share/icons/hicolor/scalable/mimetypes</IconPath>
<IconPath>/usr/share/icons/hicolor/scalable/places</IconPath>
<IconPath>/usr/share/icons/hicolor/scalable/status</IconPath>
<IconPath>/usr/share/icons</IconPath>
<IconPath>/usr/share/pixmaps</IconPath>
<IconPath>
/usr/local/share/jwm
</IconPath>
<!-- Virtual Desktops -->
<!-- Desktop tags can be contained within Desktops for desktop names. -->
<Desktops width="4" height="1">
<!-- Default background. Note that a Background tag can be
contained within a Desktop tag to give a specific background
for that desktop.
-->
<Background type="solid">#111111</Background>
</Desktops>
<!-- Double click speed (in milliseconds) -->
<DoubleClickSpeed>400</DoubleClickSpeed>
<!-- Double click delta (in pixels) -->
<DoubleClickDelta>2</DoubleClickDelta>
<!-- The focus model (sloppy or click) -->
<FocusModel>sloppy</FocusModel>
<!-- The snap mode (none, screen, or border) -->
<SnapMode distance="10">border</SnapMode>
<!-- The move mode (outline or opaque) -->
<MoveMode>opaque</MoveMode>
<!-- The resize mode (outline or opaque) -->
<ResizeMode>opaque</ResizeMode>
<!-- Key bindings -->
<Key key="Up">up</Key>
<Key key="Down">down</Key>
<Key key="Right">right</Key>
<Key key="Left">left</Key>
<Key key="h">left</Key>
<Key key="j">down</Key>
<Key key="k">up</Key>
<Key key="l">right</Key>
<Key key="Return">select</Key>
<Key key="Escape">escape</Key>
<Key mask="A" key="Tab">nextstacked</Key>
<Key mask="A" key="F4">close</Key>
<Key mask="A" key="#">desktop#</Key>
<Key mask="A" key="F1">root:1</Key>
<Key mask="A" key="F2">window</Key>
<Key mask="A" key="F10">maximize</Key>
<Key mask="A" key="Right">rdesktop</Key>
<Key mask="A" key="Left">ldesktop</Key>
<Key mask="A" key="Up">udesktop</Key>
<Key mask="A" key="Down">ddesktop</Key>
</JWM>

View File

@ -0,0 +1,12 @@
____ _
| _ \ (_)
| |_) |_ __ __ _ _ _ __ _ ___ __
| _ <| '__/ _` | | '_ \| | | \ \/ /
| |_) | | | (_| | | | | | |_| |> <
|____/|_| \__,_|_|_| |_|\__,_/_/\_\
by Brain Hackers
https://github.com/brain-hackers

View File

@ -0,0 +1,27 @@
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset,pwfeedback
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d

View File

@ -0,0 +1,4 @@
[core]
xwayland=true
backend=fbdev-backend.so

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
# Uncomment the following line to enable fcitx-mozc
# fcitx-autostart &

View File

@ -0,0 +1,53 @@
[general]
fontname=Noto Sans Mono CJK JP 10
selchars=-A-Za-z0-9,./?%&#:_
scrollback=1000
bgcolor=rgb(0,0,0)
fgcolor=rgb(211,215,207)
palette_color_0=rgb(0,0,0)
palette_color_1=rgb(205,0,0)
palette_color_2=rgb(78,154,6)
palette_color_3=rgb(196,160,0)
palette_color_4=rgb(52,101,164)
palette_color_5=rgb(117,80,123)
palette_color_6=rgb(6,152,154)
palette_color_7=rgb(211,215,207)
palette_color_8=rgb(85,87,83)
palette_color_9=rgb(239,41,41)
palette_color_10=rgb(138,226,52)
palette_color_11=rgb(252,233,79)
palette_color_12=rgb(114,159,207)
palette_color_13=rgb(173,127,168)
palette_color_14=rgb(52,226,226)
palette_color_15=rgb(238,238,236)
color_preset=Tango
disallowbold=false
cursorblinks=false
cursorunderline=false
audiblebell=false
tabpos=top
geometry_columns=80
geometry_rows=24
hidescrollbar=false
hidemenubar=false
hideclosebutton=false
hidepointer=false
disablef10=false
disablealt=false
disableconfirm=false
[shortcut]
new_window_accel=<Primary><Shift>n
new_tab_accel=<Primary><Shift>t
close_tab_accel=<Primary><Shift>w
close_window_accel=<Primary><Shift>q
copy_accel=<Primary><Shift>c
paste_accel=<Primary><Shift>v
name_tab_accel=<Primary><Shift>i
previous_tab_accel=<Primary>Page_Up
next_tab_accel=<Primary>Page_Down
move_tab_left_accel=<Primary><Shift>Page_Up
move_tab_right_accel=<Primary><Shift>Page_Down
zoom_in_accel=<Primary><Shift>plus
zoom_out_accel=<Primary><Shift>underscore
zoom_reset_accel=<Primary><Shift>parenright

View File

@ -0,0 +1,10 @@
[Unit]
Description=Mount boot partition
[Mount]
What=/dev/mmcblk1p1
Where=/boot
Options=ro
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,9 @@
[Unit]
Description=Enable RNDIS USB Gadget
[Service]
Type=oneshot
ExecStart=/usr/bin/enable_rndis_gadget
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,25 @@
#!/bin/sh
g=/sys/kernel/config/usb_gadget/eth
mkdir ${g}
echo "0x3066" > ${g}/bcdDevice
echo "1" > ${g}/os_desc/use
echo "0xcd" > ${g}/os_desc/b_vendor_code
echo "MSFT100" > ${g}/os_desc/qw_sign
mkdir ${g}/functions/rndis.rn0
echo "RNDIS" > ${g}/functions/rndis.rn0/os_desc/interface.rndis/compatible_id
echo "5162001" > ${g}/functions/rndis.rn0/os_desc/interface.rndis/sub_compatible_id
echo "8a:15:8b:44:3a:02" > ${g}/functions/rndis.rn0/dev_addr
echo "8a:15:8b:44:3a:01" > ${g}/functions/rndis.rn0/host_addr
mkdir ${g}/configs/c.1
ln -s ${g}/functions/rndis.rn0 ${g}/configs/c.1/
echo "ci_hdrc.0" > ${g}/UDC
sleep 1
ifconfig usb0 up
dhclient

153
os-brainux/setup_brainux.sh Executable file
View File

@ -0,0 +1,153 @@
#!/bin/bash
set -uex -o pipefail
if [ ! -v TIMEZONE ]; then
TIMEZONE=Asia/Tokyo
fi
if [ ! -v CI ]; then
CI=false
fi
/debootstrap/debootstrap --second-stage
if [ "${CI}" == "true" ]; then
REPO=deb.debian.org
REPO_SECURITY=deb.debian.org
else
REPO=localhost:65432
REPO_SECURITY=localhost:65433
fi
cat <<EOF > /etc/apt/sources.list
deb http://${REPO}/debian bullseye main contrib non-free
deb-src http://${REPO}/debian bullseye main contrib non-free
deb http://${REPO}/debian bullseye-updates main contrib non-free
deb-src http://${REPO}/debian bullseye-updates main contrib non-free
deb http://${REPO_SECURITY}/debian-security bullseye-security/updates main contrib non-free
deb-src http://${REPO_SECURITY}/debian-security bullseye-security/updates main contrib non-free
EOF
cat <<EOF > /etc/apt/apt.conf.d/90-norecommend
APT::Install-Recommends "0";
APT::Install-Suggests "0";
EOF
# locales: locale has to be set before going any further
apt update -y
DEBIAN_FRONTEND=noninteractive \
apt install -y locales
echo "$TIMEZONE" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata && \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
echo 'LANG="en_US.UTF-8"' > /etc/default/locale && \
dpkg-reconfigure -f noninteractive locales && \
update-locale LANG=en_US.UTF-8
LANG=en_US.UTF-8
rm /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
echo "brain" > /etc/hostname
# Install packagecloud repository
# Reference: https://packagecloud.io/brainhackers/brainux/install
# curl, ca-certificates: downloads the GPG key from packagecloud
# gnupg, debian-archive-keyring: packagecloud verification dependency
DEBIAN_FRONTEND=noninteractive \
apt install -y curl ca-certificates gnupg debian-archive-keyring
# apt-transport-https can be installed after debian-archive-keyring being installed
DEBIAN_FRONTEND=noninteractive \
apt install -y apt-transport-https
# Install GPG key and packagecloud repository config
mkdir -p /etc/apt/keyrings
curl -fsSL "https://packagecloud.io/brainhackers/brainux/gpgkey" \
| gpg --dearmor > /etc/apt/keyrings/brainhackers_brainux-archive-keyring.gpg
cat <<EOF > /etc/apt/sources.list.d/packagecloud.list
deb [signed-by=/etc/apt/keyrings/brainhackers_brainux-archive-keyring.gpg] https://packagecloud.io/brainhackers/brainux/any/ any main
deb-src [signed-by=/etc/apt/keyrings/brainhackers_brainux-archive-keyring.gpg] https://packagecloud.io/brainhackers/brainux/any/ any main
EOF
# Fetch packagecloud repository
apt update -y
DEBIAN_FRONTEND=noninteractive \
apt install -y dialog sudo \
libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev \
xserver-xorg xserver-xorg-video-fbdev xserver-xorg-dev xserver-xorg-input-evdev xinput-calibrator xorg-dev x11-apps x11-ico-dvd xinit \
jwm \
bash tmux vim htop \
midori pcmanfm lxterminal xterm gnome-terminal fbterm uim-fep uim-anthy fonts-noto-cjk \
dbus udev alsa-utils usbutils iw fake-hwclock systemd-timesyncd\
build-essential flex bison pkg-config autotools-dev libtool autoconf automake device-tree-compiler \
python3 python3-dev python3-setuptools python3-wheel python3-pip python3-smbus \
resolvconf net-tools ssh openssh-client avahi-daemon wget git \
network-manager zip neofetch sl python3-numpy ipython3 netsurf-gtk fcitx-anthy
# Packages from packagecloud
DEBIAN_FRONTEND=noninteractive \
apt install -y --install-recommends brain-config
systemctl enable fake-hwclock
# Ly
DEBIAN_FRONTEND=noninteractive \
apt install -y libpam0g-dev libxcb-xkb-dev
cd /
git clone --recurse-submodules -b master-24f017e https://github.com/brain-hackers/ly.git
cd ly
make
make install
make installsystemd
cd /
rm -r ly
systemctl enable ly
# Create editable xorg.conf.d
install -m 0777 -d /etc/X11/xorg.conf.d
# Fix Midori launch failure
sudo update-mime-database /usr/share/mime
# Setup users
adduser --gecos "" --disabled-password --home /home/user user
echo user:brain | chpasswd
echo "user ALL=(ALL:ALL) ALL" > /etc/sudoers.d/user
echo -e "127.0.1.1\tbrain" >> /etc/hosts
echo root:root | chpasswd
# Fix Xorg permission for non-root users
# https://unix.stackexchange.com/questions/315169/how-can-i-run-usr-bin-xorg-without-sudo
chown root:input /usr/lib/xorg/Xorg
chmod g+s /usr/lib/xorg/Xorg
usermod -a -G video user
# Allow root login via UART
cat <<EOF >> /etc/securetty
ttymxc0
ttyLP0
EOF
# Enable /boot mount
systemctl enable boot.mount
# Enable RNDIS gadget
systemctl enable rndis_gadget
# Get wild
cat <<EOF > /etc/apt/sources.list
deb http://deb.debian.org/debian bullseye main contrib non-free
deb-src http://deb.debian.org/debian bullseye main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free
deb http://deb.debian.org/debian-security bullseye-security/updates main contrib non-free
deb-src http://deb.debian.org/debian-security bullseye-security/updates main contrib non-free
EOF

View File

@ -0,0 +1,112 @@
#!/bin/sh
set -u
VERBOSE=0
PIN=""
SLEEP=1
GPIOS=""
while getopts "hvr:p:s:" OPT; do
case "$OPT" in
h)
echo "Usage: blink.sh [-hv] [-r PIN_RANGE_FROM-PIN_RANGE_TO] [-p PIN] [-s SLEEP_SEC]"
echo "Example: blink.sh -r 0-10 -p 12"
echo " (blink from GPIO 0 to 10 and 12)"
exit 0
;;
v)
VERBOSE=1
;;
r)
RE='^([0-9]+)-([0-9]+)$'
if echo $OPTARG | grep -qvE $RE; then
echo "Error: invalid range: $OPTARG"
exit 1
fi
FROM=$(echo $OPTARG | sed -E "s/$RE/\\1/")
TO=$(echo $OPTARG | sed -E "s/$RE/\\2/")
GPIOS="$GPIOS$(seq -s " " $FROM $TO) "
;;
p)
if echo $OPTARG | grep -qvE "^[0-9]+$"; then
echo "Error: invalid pin number: $OPTARG"
exit 1
fi
GPIOS="$GPIOS$OPTARG "
;;
s)
if echo $OPTARG | grep -qvE "^[0-9]+$"; then
echo "Error: invalid sleep duration: $OPTARG"
exit 1
fi
SLEEP=$OPTARG
;;
esac
done
if [ $VERBOSE -eq 1 ]; then
echo "Pins to iterate over: $GPIOS"
fi
if [ "$(id -u)" -ne "0" ]; then
echo "Error: please run as root"
exit 1
fi
AVAILABLE_GPIOS=""
export_gpio() {
echo $1 > /sys/class/gpio/export
}
set_direction() {
echo out > /sys/class/gpio/gpio$1/direction
}
set_value() {
echo $2 > /sys/class/gpio/gpio$1/value
}
for i in $GPIOS; do
if [ ! -e "/sys/class/gpio/gpio$i" ]; then
export_gpio $i 2>/dev/null
if [ $? -ne 0 ]; then
echo "Error: failed to export the pin $i"
continue
fi
fi
set_direction $i 2>/dev/null
if [ $? -ne 0 ]; then
# Ignore the failure if the actual direction is out
if grep -vq "out" /dsys/class/gpio/gpio$i/direction; then
echo "Error: failed to set the direction of the pin $i to out"
continue
fi
fi
AVAILABLE_GPIOS="$AVAILABLE_GPIOS$i "
done
echo "Available GPIOs: $AVAILABLE_GPIOS"
while [ 1 ]; do
for i in $AVAILABLE_GPIOS; do
set_value $i 1 2>/dev/null
if [ $? -ne 0 ]; then
echo "Warning: failed to set the value of the pin $i to high"
fi
done
sleep $SLEEP
for i in $AVAILABLE_GPIOS; do
set_value $i 0 2>/dev/null
if [ $? -ne 0 ]; then
echo "Warning: failed to set the value of the pin $i to low"
fi
done
sleep $SLEEP
done

36
tools/getcross Executable file
View File

@ -0,0 +1,36 @@
#!/bin/sh
set -e
uboot() {
. ./u-boot-brain/.config
case "${CONFIG_SYS_CPU}" in
arm926ejs) echo -n "arm-linux-gnueabi-"; return;;
armv7) echo -n "arm-linux-gnueabihf-"; return;;
*) exit 1;;
esac
}
linux() {
. ./linux-brain/.config
case "${CONFIG_CPU_ARM926T}_${CONFIG_ARCH_MULTI_V7}" in
y_) echo -n "arm-linux-gnueabi-"; return;;
_y) echo -n "arm-linux-gnueabihf-"; return;;
*) exit 1;;
esac
}
rootfs() {
. ./linux-brain/.config
case "${CONFIG_CPU_ARM926T}_${CONFIG_ARCH_MULTI_V7}" in
y_) echo -n "armel"; return;;
_y) echo -n "armhf"; return;;
*) exit 1;;
esac
}
case "$1" in
u-boot) uboot ;;
linux) linux ;;
rootfs) rootfs ;;
*) exit 1; ;;
esac

View File

@ -1,62 +0,0 @@
#!/bin/bash
TIMEZONE="Asia/Tokyo"
/debootstrap/debootstrap --second-stage
# Use local APT cache during debootstrap
cat <<EOF > /etc/apt/sources.list
deb http://localhost:65432/debian buster main contrib non-free
deb-src http://localhost:65432/debian buster main contrib non-free
deb http://localhost:65432/debian buster-updates main contrib non-free
deb-src http://localhost:65432/debian buster-updates main contrib non-free
deb http://localhost:65433/debian-security buster/updates main contrib non-free
deb-src http://localhost:65433/debian-security buster/updates main contrib non-free
EOF
cat <<EOF > /etc/apt/apt.conf.d/90-norecommend
APT::Install-Recommends "0";
APT::Install-Suggests "0";
EOF
apt update -y
apt install -y locales
echo "$TIMEZONE" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata && \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_us.UTF-8 UTF-8/' /etc/locale.gen && \
echo 'LANG="en_US.UTF-8"' > /etc/default/locale && \
dpkg-reconfigure -f noninteractive locales && \
update-locale LANG=en_US.UTF-8
echo "brain" > /etc/hostname
echo root:root | chpasswd
cat <<EOF >> /etc/securetty
ttymxc0
EOF
DEBIAN_FRONTEND=noninteractive \
apt install -y dialog sudo \
libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev \
xserver-xorg xserver-xorg-video-fbdev xserver-xorg-dev xorg-dev x11-apps \
openbox obconf obmenu \
weston xwayland \
bash tmux vim htop \
midori pcmanfm lxterminal xterm gnome-terminal fonts-noto-cjk \
dbus udev build-essential flex bison pkg-config autotools-dev libtool autoconf automake \
python3 python3-dev python3-setuptools python3-wheel python3-pip python3-smbus \
resolvconf net-tools ssh openssh-client avahi-daemon
# Get wild
cat <<EOF > /etc/apt/sources.list
deb http://ftp.jaist.ac.jp/debian buster main contrib non-free
deb-src http://ftp.jaist.ac.jp/debian buster main contrib non-free
deb http://ftp.jaist.ac.jp/debian buster-updates main contrib non-free
deb-src http://ftp.jaist.ac.jp/debian buster-updates main contrib non-free
deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
EOF

3
tools/version Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
date +"%Y-%m-%d-%H%M%S"

@ -1 +1 @@
Subproject commit 8f3049f7dc914b2dfbd29e214eb7666717f095e6
Subproject commit e8fc0d0cf39d9cd06245ef1777d1cf54258e5cb6